全局执行上下文
在脚本执行的时候由浏览器创建
全局执行上下文 = {
// 确定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代码都是在调用栈中执行的,所以调用栈就存储了关于当前函数的一些需要使用的参数。这个就是执行上下文,会在函数执行和脚本第一次执行的时候创建。