执行上下文

76 阅读2分钟

执行上下文:在执行一点JS代码之前,需要先解析代码。解析的时候会先创建一个全局执行上下文环境,先把代码中即将执行的变量、函数声明都拿出来,变量先赋值为undefined,函数先声明好可使用。这一步执行完了,才开始正式的执行程序。 在一个函数执行之前,也会创建一个函数执行上下文环境,跟全局执行上下文类似,不过函数执行上下文会多出this、arguments和函数的参数。

全局上下文:变量定义,函数声明

函数上下文:变量定义,函数声明,this,arguments

执行上下文类型

(1)全局执行上下文

任何不在函数内部的都是全局执行上下文,它首先会创建一个全局的window对象,并且设置this的值等于这个全局对象,一个程序中只有一个全局执行上下文。

(2)函数执行上下文

当一个函数被调用时,就会为该函数创建一个新的执行上下文,函数的上下文可以有任意多个

(3)eval函数执行上下文

执行在eval函数中的代码会有属于他自己的执行上下文,不过eval函数不常使用。

执行上下文总结:

1)执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;

2) 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;

3) 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;

4) 全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;

5)变量的执行环境有助于确定应该何时释放内存。