执行上下文、作用域链、闭包
2022-04-12
次访问
执行上下文
执行上下文是评估和执行 JavaScript 代码的环境的抽象概念
类型
- 全局执行上下文
1 | 它创建会执行两件事:创建一个全局的window对象, |
- 函数执行上下文
1 | 每个函数都有它自己的执行上下文,不过是在函数被调用时创建的; |
- Eval 函数执行上下文
1 | 执行在 eval 函数内部的代码也会有它属于自己的执行上下文 |
执行顺序
当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部。
引擎会执行那些执行上下文位于栈顶的函数。当该函数执行结束时,执行上下文从栈中弹出,控制流程到达当前栈中的下一个上下文。
作用域
作用域决定这个变量的生命周期及其可见性。 当我们创建了一个函数或者 {} 块,就会生成一个新的作用域
作用域链
当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。
