深入理解JS
目录
- JS基本概念
- JS怎么执行
- JS进阶知识点
- 课后总结
JS基本概念
基本上和所学的高级编程语言差不多,需要注意的有以下几点
- 注意var,let,const的区别,var存在变量提升,可多次声明,后面的声明会覆盖前面的声明,而let声明变量前,该变量不能使用,let不允许在相同作用域中重复声明,而const即声明后不可改变
var a = 1;
var a = 2;
console.log(a); // 2
console.log(a); // ReferenceError: a is not defined
let a = 10;
let a = 1;
let a = 2;// 报错
const a = 1;
a = 2; // 报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
JS怎么执行
什么是执行上下文?
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文“,执行上下文中包括变量环境、词法环境、This、可执行代码,变量环境还有一个outer变量
- 词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
- 变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量( let和const )绑定,而后者只用来存储var变量绑定
- Outer:指向外部变量环境的一个指针
执行上下文分为三种:
- 全局执行上下文:代码开始执行时就会创建,压入栈底,每个生命周期只有一份
- 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束时,该执行环境从栈顶弹出
- Eval执行上下文:使用的少,没有解释
JS进阶知识点
- 闭包:闭包是一个函数以及其捆绑的周边环境状态的引用的组合,闭包让开发者可以从内部函数访问外部函数的作用域。在 JS中,闭包会随着函数的创建而被同时创建。
- this:普通函数的this指向window,this还会在构造函数的时候使用,在下面这段代码中会出现以下过程,创建临时对象,将this指向临时对象,执行构造函数,返回临时对象
function ShowName(){
this.name = 'zq';
console.log(this.name);
}
const getName = new ShowName()
- 垃圾回收:主要有垃圾标记,对象复制,区域反转。
课后总结
这节课的重点在于js运行层面,语法方面前面已经讲了,掌握这些js运行的过程将有助于我们未来优化性能。