javascript那些事儿——提升:零散变量问题
2012-11-02 09:37
218 查看
javascript充许在函数的任意地方声明多个变量,无论在哪里声明,效果都等同于在函数顶部进行声明。这就是所谓的“提升”。
我的博客原文地址:点击打开链接
先看一个例子,当然例子中的全局变量并不被推荐。
我们先来猜猜上面这段代码的执行结果。我猜是:先弹出"global"警告框,然后弹出"local"对话框。也许你会说:“Bingo!跟我想的一样!”,这是一个合乎情理的猜测,因为在第一个alert中,myname没有声明,因此函数很可能看到全局变量myname。但是结果是先弹出"undefined",然后是"local"。因为myname被看作声明为函数的本地变量(尽管是在后面声明),所有的变量声明都提升到函数的最顶层。不信?试试这个
所以,为了避免混乱,最好在开始就声明要用的所有变量。
前面的代码等价于下面的代码片段
当先使用变量再在函数后面声明变量时可能会导致逻辑错误。对javascript而言,只要变量是在同一个范围(同一函数里),就视为已经声明,哪怕是在变量声明前就使用。
参考:《Javascript模式》p17-p18
我的博客原文地址:点击打开链接
先看一个例子,当然例子中的全局变量并不被推荐。
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
相关文章推荐
- Javascript变量提升的问题
- JavaScript的变量声明提升问题浅析(Hoisting)
- JavaScript的变量声明提升问题浅析(Hoisting)
- Javascript中变量提升的问题
- JavaScript中变量提升是语言设计缺陷
- JavaScript中变量、作用域、内存问题
- javascript之变量作用域内存问题
- javascript中的变量作用域以及变量提升
- Javascript中函数及变量定义的提升
- javascript高级程序设计(变量、作用域和内存问题)
- JavaScript 中变量、作用域和内存问题的学习
- javascript的变量声明和函数声明提升
- JavaScript中变量提升 Hoisting
- javascript 变量、作用域和内存问题
- JavaScript高级程序设计第4章(变量、作用域的问题)自己的理解
- 浅淡JavaScript中的变量提升
- 翻译 - JavaScript中的作用域与变量声明提升
- JavaScript 变量、作用域和内存问题
- JavaScript作用域和变量提升
- JavaScript难点——变量提升和函数提升(二)