众所周知,JavaScript 中存在变量提升的问题,在 ES6 引入的新关键词 let 可以很方便的解决这个问题,不过这篇文章的目的不是解决变量提升的问题,而是讨论为什么会有变量提升这种现象。
以前对这个问题根本没有想过,在看了 《你不知道的 js 》这本书后,才开始考虑并且明白了其中的原因。
变量提升的根本原因是变量声明与赋值的分离,举个例子 var a = 2;这个代码是分两步进行的。首先是 var a 这一部分的变量声明,这个过程是在代码编译时进行的。然后是 a = 2; 这一部分的变量赋值,这个过程是在代码执行时进行的。
代码先编译一遍然后才执行,这样下面的变量提升的代码就容易解释了。
console.log(a)
var a = 2;
b = 3;
var b;
console.log(b)
在这段代码编译的过程中,a 与 b 都进行了声明,代码执行的过程中先打印 a ,因为 a 只是声明了还没有赋值,所以结果是 undefined。后打印 b ,因为 b 的赋值在打印的前面,所以结果是 3.
code
网友评论