JavaScript中执行上下文是指代码在运行时的环境,包括变量、函数、对象等的创建和存储的过程。执行上下文可以分为全局执行上下文和函数执行上下文。
-
全局执行上下文:
- 在脚本开始执行时,会创建一个全局执行上下文。
- 全局执行上下文中包含全局对象(如window对象)以及全局变量和函数。
- 在全局执行上下文中,JavaScript会将全局变量和函数声明提升(即在代码执行前就创建并存储起来),但是变量的赋值操作会在代码执行时进行。
-
函数执行上下文:
- 每当一个函数被调用时,都会创建一个函数执行上下文。
- 函数执行上下文中包含函数的参数、局部变量和函数声明。
- 每当一个函数执行完毕,它的执行上下文都会被销毁,回到调用该函数的上下文中。
执行上下文的创建过程包括以下步骤:
-
创建变量对象(Variable Object):
- 全局上下文中的变量对象是全局对象(如window对象)。
- 函数上下文中的变量对象包括函数的参数和局部变量。
-
建立作用域链(Scope Chain):
- 作用域链是一个指向外部环境的指针列表,用于解析标识符的变量查找。
- 在函数创建时,会将当前的变量对象添加到函数的作用域链中。
-
确定this值:
- this值是在函数调用时确定的,它指向调用该函数的对象。
-
执行代码:
- 执行上下文中的代码。
总结起来,执行上下文是JavaScript中的一个重要概念,它决定了代码的运行环境以及变量和函数的访问规则。对于每个函数和全局代码,JavaScript引擎都会在执行前创建一个执行上下文,并按照特定的规则进行管理和销毁。