关于凌散变量的问题

Javascript允许在函数的任意地方声明多个变量,无论在哪里声明,效果都等同于在函数顶部进行声明。这是所谓的“提升”。当先使用变量再在函数后面声明变量时可能会导致逻辑错误。对Javascript而言,只要变量是在同一个范围(同一函数)里,就视为已经声明,哪怕是在变量声明前就使用。对于下面的例子:

myname = "global";//全局变量

function func(){

     alert(myname);//“未定义”

     var myname = "local";

     alert(myname);//“局部变量”

}

func();

在这个例子中,可能会以为第一个alert()会提示为“全局变量”,第二个会提示“局部变量”,这是一个合乎情理的期望,因为第一个alert中,myname没有声明,因此函数很可能“看到”全局变量myname。但事实上并不是这样,第一个alert会被指明为“未定义”,因为myname被看做声明为函数的本地变量(尽管是在后面声明)。所有的变量声明都提升到函数的最顶层。因此,为了避免这类混乱,最好在开始就声明要用的所有变量。

 

前面的代码运行结果和以下代码一样。

myname = "global";//全局变量

function func(){

     var myname;//等同于var myname = undefined;

     alert(myname);

     myname = "local";

     alert(myname);

}

func();

posted @ 2013-07-23 15:38  Joy Ho  阅读(178)  评论(0编辑  收藏  举报