深入理解JS | 青训营笔记

82 阅读4分钟

深入理解JS | 青训营笔记

JavaScript 是一门动态语言,它在浏览器端和服务器端都扮演着重要的角色。在前端开发中,JS 作为唯一的脚本语言,它负责交互、动画、数据请求等任务,是前端框架的核心。在后端开发中,Node.js 基于 V8 引擎,可以运行 JS 代码,使得 JS 能够在服务器端进行开发,这让开发人员可以使用相同的语言在前后端进行开发,提高了开发效率。因此,深入理解 JS 对于前端和后端开发人员都是非常重要的。

JS 基础

数据类型

JS 中有 7 种基本数据类型,分别为:string、number、boolean、null、undefined、symbol、object。其中,除了 object 是引用类型,其他都是原始类型。

除了基本数据类型,JS 还有一种特殊的引用数据类型:函数。函数也是一种对象,可以像其他对象一样被传递、赋值和调用。

原型与原型链

JS 中,每个对象都有一个内部属性 [[Prototype]],它指向该对象的原型。原型可以理解为一个模板,包含了对象的属性和方法。如果在对象自身找不到某个属性或方法,它就会去原型中查找。如果还找不到,就会一直沿着原型链向上查找,直到 Object.prototype,如果还没有找到,就会返回 undefined。

作用域和闭包

JS 采用的是词法作用域,即函数的作用域在声明的时候就已经确定了。在函数内部可以访问函数外部的变量,但是函数外部不能访问函数内部的变量。这就是作用域链。如果在函数内部定义一个函数,并返回这个函数,就形成了闭包。闭包可以让函数访问它的词法作用域以外的变量,这对于实现一些特殊的功能非常有用。

this

this 是 JS 中一个比较复杂的概念。它表示当前函数的上下文对象。在全局作用域中,this 指向 window 对象。在函数中,this 的值取决于函数的调用方式。如果是作为对象的方法调用,this 指向对象本身,如果是普通函数调用,this 指向全局对象。如果使用 call、apply 或 bind 方法,可以改变函数的上下文对象。

JS 进阶

异步编程

JS 是一门单线程语言,它只能同时执行一个任务。如果一个任务耗时较长,就会阻塞后续任务的执行,造成页面卡顿。为了解决这个问题,JS 引入了异步编程。异步编程从根本上解决了阻塞问题,让 JS 能够同时执行多个任务,提高了性能。

JS 提供了多种异步编程的方法,常用的有回调函数、Promise 和 async/await。回调函数是最早的一种异步编程方法,但是它有回调地狱的问题。Promise 出现后,大大简化了异步编程的代码。async/await 是 ES7 中新增的语法,可以让异步代码看起来像同步代码,更容易理解和维护。

面向对象编程

JS 是一门面向对象的语言,但是它的面向对象编程和其他语言有很大的不同。JS 中的对象是一种键值对的集合,它没有类的概念。JS 中的面向对象编程主要通过原型和构造函数来实现。通过构造函数可以创建对象,通过原型可以实现对象的继承。

模块化

模块化是一种代码组织的方式,它可以让代码更加清晰、易于维护。在 JS 中,模块化最早是通过命名空间来实现的。但是命名空间的缺点是容易产生命名冲突。后来,JS 引入了模块化的概念,通过 export 和 import 关键字来实现。ES6 中的模块化语法是最常用的一种模块化方式。

总结

JS 是一门非常重要的编程语言,在前端和后端开发中都扮演着重要的角色。深入理解 JS 对于开发人员来说是非常重要的。本文介绍了 JS 的基础和进阶知识,包括数据类型、原型和原型链、作用域和闭包、this、异步编程、面向对象编程和模块化。掌握这些知识可以让开发人员更加熟练地使用 JS 进行开发。