美文网首页
Javascript代码的执行过程例题详解(作用域链)

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

作者: LcoderQ | 来源:发表于2021-11-17 13:32 被阅读0次

    分析如下代码的输出结果

    题目一

    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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/anmdtrtx.html