作用域和预解析阶段变量提升考察

下面代码输出什么?

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()

这里先放个占位图遮住答案,如果不能清楚的得到结果,那么请往下看

image.png

结果:依次输出:undefined -> 10 -> 20

下面说下原理。

js代码执行存在两个阶段:

  • 预解析
  • 执行

预解析阶段,实际解析出来的js代码如下:

var a
a = 10
(function () {
    var a // var的变量默认值为undefiend
    console.log(a) // undefiend
    a = 5
    console.log(window.a) // 取window下的a,即全局作用域下的a,10
    a = 20
    console.log(a) // 20
})()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容