zoukankan      html  css  js  c++  java
  • javascript中的var浅析

    对var不是很理解,就上网查了查,很多都是这个例子,说看了例子就理解了,但是看了半天还是不懂。例子如下:

    例一:

     1 <script language="javascript">
     2 var var00 = 0;
     3 document.write(var00 + '<br>');
     4 
     5 var var01 = 1;
     6 function foo()
     7 {
     8     document.write(var01); 
     9     var var01 = 1;
    10 }
    11 foo();
    12 </script>

    例二:

    <script language="javascript">
    var00 = 0;
    document.write(var00 + '<br>');
    
    var01 = 1;
    function foo()
    {
        document.write(var01); 
        var01 = 1;
    }
    foo();
    </script>

    例三:

    <script language="javascript">
    var00 = 0;
    document.write(var00 + '<br>');
    
    var01 = 1;
    function foo()
    {
        document.write(var01); 
        var var01 = 1;
    }
    foo();
    </script>

    输出的结果:

    1:0、undefined

    2:0、1

    3:0、undefined

    原文中的解释如下:

      原来JavaScript的变量也是有作用域的,只是它非常的笼统,就分为全局变量和函数变量。在第二个例子中得到0和1,是因为所有的变量都是全局变量,而且那个语句块一共就定义了两个变量。而第一个第三的函数外全局变量,确实说明var关键字有没有都没有关系。而函数内的var关键字就很关键了,它说明第二个var01是函数内的变量,所以在初始化var01前输出自然就是'undefined'了。
         那么函数里面是不是就屏蔽掉了全局的var01了呢?我们知道在C/C++可以使用::去访问全局变量,那么JavaScript可不可以呢?这里其实我们只要明白了全局变量到底是什么东西,就好弄了。原来全局变量都是动态添加到Window对象的实例window上的属性而以,所以我们只要在函数内用:document.write(window.var01);就可以取到其值1了。同时在这个上下文中,function内的this也是指向的window实例,我们也可以把引用写成:this.var01。

    但是反正我看了还是不太明白,为什么第一个例子和第三个例子中的var01不能先取全局变量来输出1,然后才定义赋值给局部变量var01.最后了解到:其实函数内的变量都是先定义,后赋值的,不管定义变量的语句写在何处。而且要明白,在函数外面定义变量的时候,有没有var都无所谓,在函数内部定义变量,如果前面有var就代表是函数内的局部变量,否则为调用全局变量。比如, 

     1 function foo() 
     2 { 
     3 document.write(var01); 
     4 var var01=1; 
     5 document.write(var02); 
     6 var var02=2; 
     7 } 
     8 该函数等价于: 
     9 function foo() 
    10 { 
    11 var var01; 
    12 var var02; 
    13 document.write(var01); 
    14 var01 = 1; 
    15 document.write(var02); 
    16 var02 =2; 
    17 } 

    如此,一下子恍然大悟。所以在执行document.write(var01)时,变量只是定义了,而没有被赋值,所以输出undefined. 将函数改为:

     1  var var00 = 0;
     2  document.write(var00 + '<br>');
     3   
     4  var var01 = 1;
     5  function foo()
     6  {
     7      var var01 = 2;
     8      document.write(var01); 
     9  }
    10 foo();

    输出结果就为:0、2,说明在函数内部是定义后马上赋值,在document.write调用之前就赋值了,所以显示为局部变量的值为2。

  • 相关阅读:
    自学Zabbix3.6.4-触发器triggers dependencies依赖关系
    自学Zabbix3.6.3-触发器triggers expression表达式
    TSLint提示错误
    angular4.0 配置打包路径以及资源文件404问题
    angular4.0配置本机IP访问项目
    angular4.0如何引入外部插件2:declare方案
    angular4.0如何引入外部插件1:import方案
    angular4.0中form表单双向数据绑定正确姿势
    angular4.0单个标签不能同时使用ngFor和ngIf
    angular4.0使用JSONP数据请求
  • 原文地址:https://www.cnblogs.com/fredshare/p/2627646.html
Copyright © 2011-2022 走看看