js 中的执行环境

先来看几个属性

一 执行环境(execution context 简称EC)

当JavaScript代码执行的时候,会进入不同的执行环境(也可以理解为作用域),执行环境定义了变量或函数有权访问的其他数据,这些执行环境会构成了一个执行环境栈(Execution context stack,ECS 可以理解为作用域链)。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退出)。执行环境结构如下

js 中的执行环境_第1张图片
1846966-9ded98302b647e3d.png

---------------------------------------------其中的几个比较重要的属性
1.变量对象(variable object 简称VO)
变量对象即包含当前 EC里的变量的对象,环境中定义的所有变量和函数都保存在这个对象中
2.[[Scope]]属性
指向作用域链, 作用域链是一个由变量对象组成的带头结点的单向链表,其主要作用就是用来进行变量查找。而[[Scope]]属性是一个指向这个链表头节点的指针
3.this指针
指向一个环境对象,注意是一个 对象,而且是一个普通对象,而不是一个执行环境。
每个函数都有自己的执行环境。当执行流进入一个函数时,函数的执行环境就会被推入一个执行环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境
更详细的执行流程可以看下知乎上的大神的答案第二个( https://www.zhihu.com/question/36393048)

你可能感兴趣的:(js 中的执行环境)