ES6 中的执行上下文
2024-02-15 20:28:11
ES6 中的执行上下文(execution context)
ES6 将执行上下文(execution context)分为两个阶段,分别是创建阶段与执行阶段。
创建阶段
在创建阶段主要分为三个步骤,确定临时死区、绑定变量以及参数。
- 确定临时死区
临时死区是指在变量声明之前,该变量是不可访问的。在 ES6 中,临时死区是从块级作用域的开始到变量声明为止。例如:
{
let x = 10;
console.log(x); // ReferenceError: x is not defined
}
在上面的代码中,变量 x 在块级作用域的开始处声明,因此在声明之前访问变量 x 会抛出 ReferenceError。
- 绑定变量
在创建阶段,会将变量与它的值绑定在一起。如果变量没有被初始化,则会被绑定为 undefined。例如:
let x;
console.log(x); // undefined
在上面的代码中,变量 x 没有被初始化,因此在创建阶段就被绑定为 undefined。
- 参数
在创建阶段,函数的参数也会被绑定到它的值。如果函数的参数没有被指定默认值,则会被绑定为 undefined。例如:
function sum(a, b) {
console.log(a, b); // undefined undefined
}
sum();
在上面的代码中,函数 sum 的参数 a 和 b 没有被指定默认值,因此在创建阶段就被绑定为 undefined。
执行阶段
在创建阶段之后,就会进入执行阶段。在执行阶段,会依次执行代码。执行阶段的步骤如下:
- 执行全局代码
在执行阶段的开始,会执行全局代码。全局代码是指没有在任何函数或块级作用域中定义的代码。例如:
console.log("Hello, world!");
在上面的代码中,console.log("Hello, world!") 是全局代码,因此会在执行阶段的开始执行。
- 执行函数代码
在执行完全局代码之后,就会执行函数代码。函数代码是指在函数中定义的代码。例如:
function sum(a, b) {
return a + b;
}
const result = sum(1, 2);
在上面的代码中,sum(1, 2) 是函数代码,因此会在执行阶段的第二步执行。
- 执行块级作用域代码
在执行完函数代码之后,就会执行块级作用域代码。块级作用域代码是指在块级作用域中定义的代码。例如:
{
let x = 10;
console.log(x); // 10
}
在上面的代码中,{ let x = 10; console.log(x); } 是块级作用域代码,因此会在执行阶段的第三步执行。
执行上下文的作用
执行上下文在 JavaScript 代码的执行过程中起着非常重要的作用。执行上下文可以帮助我们理解 JavaScript 代码的执行过程,并可以帮助我们更好地调试 JavaScript 代码。例如,我们可以通过执行上下文来了解变量的声明位置和作用域,以及函数的参数是如何被绑定的。