问答详情
源自:5-5 返回值的函数

变量必须"声明"吗?

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

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

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

提问者:godhypnos 2015-11-20 21:39

个回答

  • 李晓健
    2015-11-20 21:48:28
    已采纳

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

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

  • godhypnos
    2015-11-20 22:18:09

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

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

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

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

    谢谢~~!!!