为了账号安全,请及时绑定邮箱和手机立即绑定

变量必须"声明"吗?

做这道题的时候,我发现:

“req1 = app2(5,6);”与“var req1 = app2(5,6);”同样起作用!

req1这个变量事先没有声明过呀!如果不需要声明也可以使用变量……那么声明变量的过程又有什么意义呢?

正在回答

2 回答

因为变量是存在一个作用域内,只有在这个作用域内才可以访问到这个变量;

比喻  function test(){var a=1 };  这时这个a就只在这个test方法内可以访问到。如果在test外面访问a就会报未定义。 再来说一下你的问题,如果不用var 来声明 ,还是原来的代码,function test(){ a=1 }; 这时这个a不仅可以在 test方法内可以访问到,在test方法外也可以访问到。也就是说如果不加var 就是直接声明到了window 上,不管哪里都可以访问到。最明显的问题就是,你代码写的太多了,你前面已经写了一个a   后面忘了又写了一个a 都没有加 var ; 他们在任何地方都可以访问,后面的一个就会直接覆盖掉前面的一个。用到你前面一个a的地方的代码就会问题。也就是传说中的全局变量污染。

1 回复 有任何疑惑可以回复我~
#1

godhypnos 提问者

非常感谢!
2015-11-20 回复 有任何疑惑可以回复我~
#2

godhypnos 提问者

那么,下面这段: ~~~~~~~~~~~~~~~ if (){ var a ; ........ for (var b=0; ......){ ....... } } else { var c; ...... } ~~~~~~~~~~~~~~~~ 变量a、b、c作用范围相同吗? 另:下面的x、y是全局变量吗? ~~~~~~~~~~~~~~~~ function temp(x,y){ var z = x +y; ....... } ~~~~~~~~~~~~~~~~ 谢谢~~!!!
2015-11-20 回复 有任何疑惑可以回复我~

那么,下面这段:
~~~~~~~~~~~~~~~
if (){

    var a ;
    ........
    for (var b=0; ......){
    .......
    }
}
else {
    var c;
    ......
}
~~~~~~~~~~~~~~~~

变量a、b、c作用范围相同吗?

另:下面的x、y是全局变量吗?
~~~~~~~~~~~~~~~~
function temp(x,y){
    var z = x +y;
    .......
}
~~~~~~~~~~~~~~~~

谢谢~~!!!

0 回复 有任何疑惑可以回复我~
#1

李晓健

a b c 的作用域相同,因为ECMA5中 作用域还没有块级的,都是方法级的;ECMA6中才有块级作用域。x y 也不是全局变量,他们只是参数,也只有在方法内才可以访问到。
2015-11-20 回复 有任何疑惑可以回复我~
#2

godhypnos 提问者 回复 李晓健

万分感谢~!
2015-11-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468061    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

变量必须"声明"吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信