JavaScript执行上下文

83 阅读1分钟

执行上下文

函数执行上下文:一个函数运行之前,创建的一块内存空间,空间中包含有该函数执行所需要的数据,为该函数执行提供支持。

执行上下文栈:call stack,所有执行上下文组成的内存空间。

栈:一种数据结构,先进后出,FILO。

全局执行上下文:所有js代码执行之前,都必须有该环境。

JS引擎始终执行的是栈顶的上下文。

执行上下文中的内容

1.this指向

1).直接调用函数,this指向全局对象
2).在函数外,this指向全局对象
3).通过对象调用或new一个函数,this指向调用的对象或新对象。

2.VO变量对象

Variable Object:VO中记录了该环境中的所有声明的参数、变量和函数

Global Object:GO,全局执行上下文中的VO

Active Object:AO,当前正在执行的上下文中的VO

1).确定所有的形参以及特殊变量arguments
2).确定函数中声明的变量,将他们的值设置为undefined,如果VO中已有该名称,则直接忽略。
3).确定函数中通过字面量声明的函数,将他们的值设置为指向函数对象,如果VO中已存在该名称,则覆盖

当一个上下文中的代码执行的时候,如果上下文中不存在某个属性,则会从之前的上下文中查找。(这就是为什么函数里面可以用外面的)

例子

image.png

image.png