执行上下文

74 阅读1分钟

全局执行上下文

在执行全局代码前将 window 确定为全局执行上下文。 对全局数据进行预处理:

  • var 定义的全局变量赋值 undefined 添加为 window 的属性
  • function 声明的全局函数赋值添加为 window 的方法
  • this 赋值 window
console.log(a1,window.a1) // undefined undefined
a2() // 'a2()'
console.log(this) // window

var a1 = 3
function a2() {
  console.log('a2()')
}
console.log(a1) // 3

函数执行上下文

在调用函数,准备执行函数体之前,创建对应的函数执行上下文对象(虚拟的,实际上不是一个对象,是在栈内存的一块封闭区域,函数调用完后该区域被销毁)
对局部数据进行预处理:

  • 形参变量赋值实参,添加为执行上下文对象的属性
  • arguments 赋值实参列表,添加为执行上下文对象的属性
  • var 定义的局部变量赋值为 undefined 添加为执行上下文对象的属性
  • function 声明的函数赋值添加为执行上下文对象的方法
  • this 赋值调用函数的对象
function fn(a1) {
  console.log(a1) // 2
  console.log(a2) // undefined
  a3() // 'a3()'
  console.log(this) // window
  console.log(arguments) // 类数组对象 [2,3]

  var a2 = 3
  function a3() {
    console.log('a3()')
  }
} 

fn(2,3)