(自用面试题)执行上下文是什么?

81 阅读2分钟

执行上下文的定义

变量或函数的上下文决定了它们可以访问哪些数据以及它们的行为。每个上下文都有一个关联的变量对象(variable object),而这个上下文中定义的所有变量和函数都存在于这个对象上。

执行上下文的分类

执行上下文包括全局执行上下文、函数执行上下文、eval函数执行上下文。

  1. 对于全局执行上下文来说:
    任何不在函数内部的都是全局执行上下文,它首先会创建一个全局的window对象,并且设置this的值等于这个全局对象。一个程序中只有一个全局执行上下文。
  2. 对于函数执行上下文来说:
    当一个函数被调用时,就会为该函数创建一个新的执行上下文。函数执行上下文可以有任意多个。
  3. 对于eval函数执行上下文来说:
    执行在eval函数中的代码会有属于它自己的执行上下文,不过eval函数不常使用而且不建议使用。

执行上下文栈

JS引擎使用执行上下文栈来管理执行上下文:当JS执行代码时,首先遇到全局代码,会创建一个全局执行上下文并且压入栈中;每当遇到一个函数调用,就会为该函数创建一个新的执行上下文并压入栈顶。然后JS引擎会执行位于栈顶的函数,当函数执行完成之后,执行上下文从栈中弹出,继续执行下一个上下文;当所有的代码都执行完毕之后,从栈中弹出全局执行上下文。