国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > javascript变量:全局?还是局部?这个得注意

javascript变量:全局?还是局部?这个得注意

来源:程序员人生   发布时间:2014-11-18 08:44:01 阅读次数:3233次

      在JS中,是没有块级作用域的

      举两个个例子:

      if语句块:    

if (true){ var name='Ling'; } alert(name);
输出:Ling


      for语句块;  

for(var i=0;i<10;i++) { var name='Ling'; } alert(i); alert(name);

输出:10

输出:Ling


也就是说最后的结果都是window下全局变量:

<span style="font-family:KaiTi_GB2312;">alert(window.i); alert(window.name);</span>


      在Javascript的函数体中,有下面几种情况需要注意:

      1、有没有Var

        如果有Var,在函数内部声明变量是局部变量,以下例,读取不到name的数据。

<span style="font-family:KaiTi_GB2312;">function box(){ var name ='Ling'; } alert(name);</span>
        如果把var去掉的话,那末就会输出:Ling,此时声明的变量为全局变量。在写代码的进程中,不适用var就初始变量的话,会有很多意外产生,所以初始变量的时候1定要加上var。

     

       2、全局变量和局部变量命名相同    

<span style="font-family:KaiTi_GB2312;">var scope="global"; function t(){ alert(scope); var scope="local" alert(scope); } </span>
    终究的输出结果是:

               undefined

               local

 

   为何会出现这样的结果?由于:

   javascript 变量范围

(1)全局变量的作用域是全局性的,即在全部Javascript程序中,全局变量作用途处都存在。定义在”script”块中,在”function”函数外。
(2)局部变量的作用域是局部性的,在函数内部或函数参数时定义,作用范围是从函数开始到结尾(注意此处说法)
(3)在函数内部,局部变量的优先级比同名的全局变量优先级要高;如果存在与全局变量名称相同的局部变量(包括参数),那末该全局变量将不再起作用。

    

  原来是这个缘由。不知道你看明白了没有~~

  

  那末当全局变量和局部变量重名时,怎样解决这个问题呢?

  

  哈哈~~最简单确当然就是避免全局变量和局部变量相遇咯~~

  

  还有另外1种方法,window对象的所有属性具有全局作用域,用window.全局变量名,以下:

 

<span style="font-family:KaiTi_GB2312;">var scope="global"; function t(){ alert(window.scope); var scope="local" alert(scope); } </span>

至此,问题也就说完了。


  总结

上面的问题其实也反应的另外一个问题,命名规范的问题,如果命名不规范,就会出现很多意想不到的问题,所以,花点时间上网查查几种不同的命名的规范,这样能在你编写代码的时候减少没必要要的麻烦。

     

      


    

       

       

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生