Javascript代码的执行过程例题详解(作用域链)

分析如下代码的输出结果

题目一

var message = "全局作用域"

function foo() {
    console.log(message);
 }
 
function bar() {
    var message = "bar中"
     foo()
 }
 
bar()

解答

  • 在编译阶段,浏览器会创建一个全局对象GO,该对象包含重多属性如,String,Number等,另外会声明全局对象message,定义函数bar、foo,如图:


    image.png
  • 编译完成后开始执行,创建全局执行上下文,包含vo对象和具体执行的代码,执行完第一行后,如图:


    image.png
  • 函数继续执行,执行到第12行时,开始执行函数bar,创建一个函数执行上下文,包含指向AO(activation object)的VO对象


    image.png
  • 继续执行


    image.png
  • 继续执行,创建新的函数执行上下文,包含一个vo对象指向新的AO对象(图中为AO2),在foo中并没有定义或赋值,只是打印对应的值


    image.png

结论

这里并没有打印bar中,是因为函数的作用域在编译的时候就已经确定了,跟执行的顺序是没有关系的

另外的一些题

image.png
  • 其中var a = b = 100 相当于var a = 100; b = 100在JS中相当于定义了局部变量a全局变量b
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容