您是否深入思考:JavaScript代码,如何在浏览器中执行?
对代码进行了分析,V8引擎将帮助我们创建一个对象(GlobalObject-> GO)
运行代码
JS引擎内有一个执行上下文堆栈,该堆栈称为ECS,用于执行代码调用堆栈
点火是一种解释器,可将AST转换为字节码(字节)
Turbofan是可以将字节代码编译到可以直接执行的CPU的编译器;
在第二行中打印num1将显示未定义
打印结果:你好全球
执行过程:首先,pre -preclied {消息:Undefined,foo:0xa00,bar:0xb00};然后执行代码以给出各种作业{消息:“ Hello Global”,foo:0xa00,bar:0xb00}; bar(),然后首先称为bar(),然后在此处执行上下文。其中的vo对象是AO。此处的var消息存储在AO中,然后致电FOO()还有另一个函数执行上下文。这里执行的代码是打印消息。然后发现的第一件事是,该字段中有一个消息()。将其称为“ Hello Global”
第一个问题
输出结果:
分析:第一个预编译 - > {n:undefined,foo:0xa00},然后在编译时将值分配给n,调用foo(),此处调用foo函数并创建函数执行上下文。如果n在foo函数对象,您将转到上层以在父级中找到n并将值分配给200,因此相当于修改旅途中的值,因此,当最终打印时,n为200。
注意:让我在这里区分它。如果是这种情况,输出n为100
两个问题
输出结果:
分析:
第三个问题
输出结果:请参阅评论
第四个问题
输出结果:
分析:
第五个问题
输出结果:
原始:https://juejin.cn/post/7099834026541711391