美文网首页
【进阶1-1】理解JavaScript的执行上下文和执行栈

【进阶1-1】理解JavaScript的执行上下文和执行栈

作者: IgreatDD | 来源:发表于2019-03-07 15:51 被阅读0次

执行上下文

执行上下文是当前JavaScript被解析和运行时所在环境的抽象概念。

执行上下文的类型

  • 全局执行上下文:只有一个,浏览器的全局对象就是windows对象,this指向这个对象。
  • 函数执行上下文:只有在函数被调用的时候才会被创建。每次调用函数都会创建一个新的函数执行上下文。
  • eval执行上下文:运行在eval函数中的代码。

执行栈

执行栈,也叫任务栈。具有LIFO(后进先出)的结构。用于存储代码运行期间创建的所有执行上下文。

  1. 首次运行代码时,会创建一个全局的执行上下文,并push到执行栈中。每当发生函数调用,都会创建一个函数执行上下文,并push到当前的执行栈中。
  2. 根据任务栈LIFO的结构,当栈顶函数调用完毕后,会从执行栈的栈顶pop出这个函数的函数执行上下文。上下文控制权会移交给下一个执行上下文。
function first() {  
  console.log('Inside first function');  
  second();  
  console.log('Again inside first function');  
}

function second() {  
  console.log('Inside second function');  
}

first();  
console.log('Inside Global Execution Context');
// Inside first function
// Inside second function
// Again inside first function
// Inside Global Execution Context
JavaScript执行上下文流程图.png

执行上下文的创建

执行上下文分为两个阶段进行创建:1.创建阶段2.执行阶段

创建阶段

  1. 确定 this 的值,也就是 this binding
  2. LexicalEnvironment(词法环境) 组件被创建。
  3. VariableEnvironment(变量环境) 组件被创建。

相关文章

网友评论

      本文标题:【进阶1-1】理解JavaScript的执行上下文和执行栈

      本文链接:https://www.haomeiwen.com/subject/cfocpqtx.html