前端组知识库

👍欢迎大家积极投稿交流👍

如果文档内容陈旧或者链接失效,请发现后及时同步,我将尽快修改

👇微信👇

图片
Skip to content

执行上下文栈

JavaScript 引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”(执行上下文)

变量提升

js
var foo = function () {
  console.log('foo1')
}
foo() // foo1
var foo = function () {
  console.log('foo2')
}
foo() // foo2

函数提升

js
function foo() {
  console.log('foo1')
}
foo() // foo2
function foo() {
  console.log('foo2')
}
foo() // foo2

可执行代码

  • 全局代码
  • 函数代码
  • eval代码

例子

例子1

js
var scope = 'global scope'
function checkscope() {
  var scope = 'local scope'
  function f() {
    return scope
  }
  return f()
}
checkscope()

模拟结果

js
stack.push(checkscope)
stack.push(f)
stack.pop() // f()
stack.pop() // checkscope()

例子2

js
var scope = 'global scope'
function checkscope() {
  var scope = 'local scope'
  function f() {
    return scope
  }
  return f
}
checkscope()()

模拟结果

js
stack.push(checkscope)
stack.pop() // checkscope()
stack.push(f)
stack.pop() // f()

上次更新于: