变量必须"声明"吗?

来源:5-5 返回值的函数

godhypnos

2015-11-20 21:39

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

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

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

写回答 关注

2回答

  • 李晓健
    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的地方的代码就会问题。也就是传说中的全局变量污染。

    godhyp...

    那么,下面这段: ~~~~~~~~~~~~~~~ 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 22:19:18

    共 2 条回复 >

  • 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;
        .......
    }
    ~~~~~~~~~~~~~~~~

    谢谢~~!!!

    godhyp... 回复李晓健

    万分感谢~!

    2015-11-20 22:41:30

    共 2 条回复 >

JavaScript进阶篇

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

468192 学习 · 21891 问题

查看课程

相似问题