之前和一个同事做一个项目的时候遇到了一个变量提升的问题,明明已经定义了但是会弹出undefined.后来查了一下,因为是变量提升的原因才导致的。
var V="Hello World";
(function(){
alert(V);
var V="111"
})()
这个时候你会弹出一个undefined,按照我们本来的
思路应该是弹出一个Hello World或者111,和undefined是完成不沾边的。
当我们把函数改成这个样子的时候
var V="Hello World";
(function(){
var V="111"
alert(V);
})()
弹出的东西就是111,没错,这牵涉到了作用域的东西。一般我们把变量声明在作用域的顶端就不会出现这种问题,但是变量提升,它仅仅提升的只是变量,并没有提升变量的值。我们回到第一个demo:
var V="Hello World";
(function(){
var V;
alert(V);
V="111"
})()
实际上是这样的,这样你弹出的东西就是undefined了,因为你提升了变量,到了作用域的顶端,但是值在alert下方。JS是从上往下执行。自然而然它就没有找到。
所以以后我们以后定义变量以及值最好是定义在作用域的顶端。这样会避免一些不必要的错误。