您的位置:首页 > Web前端 > JavaScript

javascript那些事儿——提升:零散变量问题

2012-11-02 09:37 218 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: