美文网首页
JavaScript变量提升

JavaScript变量提升

作者: sisselxie | 来源:发表于2020-07-23 15:17 被阅读0次

    js'一段'代码执行前,需要先编译,编译后会生成两部分内容:执行上下文和可执行代码:
    执行上下文:比如调用一个函数,就会进入该函数的执行上下文,确定该函数执行期间用到的this, 变量,对象,函数等。执行上下文中存在变量环境对象。该对象保存了变量提升的内容。

    image.png
    showName()
    console.log(myname)
    var myname = '变量环境'
    function showName() { 
      console.log('函数showName被执行');
    }
    

    分析上面代码变量环境怎么生成的:
    1.第一行和二行代码不是声明操作,JavaScript引擎不做任何处理。
    2.第三行,由于是var声明,JavaScript引擎会在变量环境对象添加一个myname属性,并用undefined初始化。
    3.第四行Javascript发现通过function定义的函数,所以他将函数定义存储在堆中,并在变量环境对象中创建一个showName的属性,并将改属性值指向函数在堆中的位置
    这样就生成了变量环境对象,现在有了执行上下文和可执行代码,就到执行阶段了
    执行阶段,按顺序一行一行执行
    当执行到调用showName函数时,JavaScript引擎会去变量环境查找showName,由于环境变量中存在改函数的引用,所以JavaScript开始执行。
    接下来打印myname,JavaScript引擎继续在变量环境查找myname,找到了,打印出来undefined。
    执行第三行把 '变量环境' 赋值给myname,赋值后变量环境myname的值变成 '变量环境'
    以上就是一段代码的编译和执行流程

    相关文章

      网友评论

          本文标题:JavaScript变量提升

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