关于执行上下文

84 阅读1分钟

全局执行上下文

在脚本执行的时候由浏览器创建

全局执行上下文 = {  
    // 确定this的值
    ThisBinding = window,
    词法环境组件 = {
      环境记录: 函数声明 let const声明的变量  a: uninitialized(const let值是未定义)
      对外部环境引入记录: null(作用域指针,全局的是null)
    },
    变量环境组件 = {
      环境记录:存储var声明的变量   a: undefined 所以可以打印出来
      对外部环境引入记录: null
    },
}

函数执行上下文

js函数调用时

函数执行上下文 = {
    ThisBinding: this, // 调用函数的对象 或者 window 或者 外层this(箭头函数)
    词法环境组件: {  
      Arguments: {0: 参数, 1: 参数, length: 2} 
      外部环境引入记录: 外层的函数 -> 直到全局(作用域链) 
    },
  
    变量环境组件: {  
      存储var声明的变量
      外部环境引入记录: 外层的函数 -> 直到全局(作用域链) 
    }  
}

js代码都是在调用栈中执行的,所以调用栈就存储了关于当前函数的一些需要使用的参数。这个就是执行上下文,会在函数执行和脚本第一次执行的时候创建。