javascript充许在函数的任意地方声明多个变量,无论在哪里声明,效果都等同于在函数顶部进行声明。这就是所谓的“提升”。
我的博客原文地址:点击打开链接
先看一个例子,当然例子中的全局变量并不被推荐。
myname = "global";//全局变量
function func(){
alert(myname);
var myname = "local";//局部变量
alert(myname);
}
func();
我们先来猜猜上面这段代码的执行结果。我猜是:先弹出"global"警告框,然后弹出"local"对话框。也许你会说:“Bingo!跟我想的一样!”,这是一个合乎情理的猜测,因为在第一个alert中,myname没有声明,因此函数很可能看到全局变量myname。但是结果是先弹出"undefined",然后是"local"。因为myname被看作声明为函数的本地变量(尽管是在后面声明),所有的变量声明都提升到函数的最顶层。不信? 试试这个
所以,为了避免混乱,最好在开始就声明要用的所有变量。
前面的代码等价于下面的代码片段
myname = "global";//全局变量
function func(){
var myname;
alert(myname);//undefined
myname = "local";
alert(myname);//local
}
func();
当先使用变量再在函数后面声明变量时可能会导致逻辑错误。对javascript而言,只要变量是在同一个范围(同一函数里),就视为已经声明,哪怕是在变量声明前就使用。
参考:《Javascript模式》p17-p18