美文网首页
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