关于JS里面的变量提升

之前和一个同事做一个项目的时候遇到了一个变量提升的问题,明明已经定义了但是会弹出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是从上往下执行。自然而然它就没有找到。

所以以后我们以后定义变量以及值最好是定义在作用域的顶端。这样会避免一些不必要的错误。


posted @ 2015-04-17 11:50  独孤残情  阅读(207)  评论(0编辑  收藏  举报