初始化全局对象
自用笔记
初始化全局对象(GO)和 执行上下文(EC)
var num1=1
var num1=2
var result=num1+num2
console.log(result)
初始化全局对象(GO)
JS引擎在解析代码的时候,会在堆内存中创建一个全局对象叫:Gobal Object (GO)
- 该对象所有作用域都可以访问
- 会包含Date Array String Number setTimeout setInterval
- 并会创建一个windows属性指向本身
执行上下文
代码运行时:js引擎(这里考虑V8引擎)会创建执行上下文栈(Execution context stack)简称ECS,它就是执行代码的调用栈
这个文章解释的ECS很清楚:juejin.cn/post/719474…
执行上下文分为:全局执行上下文(GEC)和 函数执行上下文(FEC)
全局执行上下文(GEC)
全局作用域执行时会被分为两部分:
- 解析代码,即parse转成AST的过程中:全局定义的变量放入初始化全局对象(GO),但是不会赋值,目前只是在解析阶段。这个过程也被叫做变量的作用域提升
- 执行代码:此时为GO中的变量赋值,或者执行其它函数
函数执行上下文(FEC)
当js引擎遇到函数执行时,会创建一个 函数执行上下文( Functional Execution Contex ) 简称FEC,并压入到执行上下文栈ECS
FEC中包含三部分内容:
1、VO(variable object)对象,其实也是AO(Activation Object)
2、作用域链:由自己的VO+父级的VO,查找时会一层一层去查找
3、this绑定
作用域: 解析编译时就已经决定了,不是在执行调用的时候
var message = "Global"
function foo() {
console.log(message)
}
function bar() {
var message = "Bar"
foo()
}
bar()
分析这段代码:参考:juejin.cn/post/712906…
(此时需要理解出入栈的内容,参考:juejin.cn/post/719474…
本篇文章中,涉及的内容: 1、ECS 2、GEC 3、FEC 4、VO 5、VE 6、GO 7、AO