zoukankan      html  css  js  c++  java
  • javascript变量:全局?还是局部?这个得注意

          在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就初始变量的话。会有非常多意外发生。所以初始变量的时候一定要加上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)在函数内部。局部变量的优先级比同名的全局变量优先级要高。假设存在与全局变量名称同样的局部变量(包含參数),那么该全局变量将不再起作用。

        

      原来是这个原因。不知道你看明确了没有~~

      

      那么当全局变量和局部变量重名时。怎么解决问题呢?

      

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

      

      还有第二种方法,window对象的全部属性拥有全局作用域,用window.全局变量名。例如以下:

     

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

    至此,问题也就说完了。


      总结

    上面的问题事实上也反映的还有一个问题,命名规范的问题,假设命名不规范,就会出现非常多意想不到的问题,所以,花点时间上网查查几种不同的命名的规范,这样能在你编写代码的时候降低不必要的麻烦。

         

          


        

           

           

  • 相关阅读:
    Python笔记_第一篇_面向过程_第一部分_7.文件的操作(.txt)
    Python笔记_第一篇_面向过程_第一部分_6.语句的嵌套
    Python笔记_第一篇_面向过程_第一部分_6.其他控制语句(with...as等)
    Python笔记_第一篇_面向过程第一部分_6.循环控制语句(while 和 for)_
    Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
    matplot 代码实例
    python下的MySQLdb使用
    vim操作笔记
    使用k-近邻算法改进约会网站的配对效果
    python 读取文本
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6722344.html
Copyright © 2011-2022 走看看