关于JS里面的变量提升

来源:互联网 发布:vmp脱壳软件 编辑:程序博客网 时间:2024/06/05 02:17

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

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


0 0