zoukankan      html  css  js  c++  java
  • JS变量及其作用域

    转 https://www.jb51.net/article/109879.htm

    1、 变量及其作用域:变量分为“全局变量”和“局部变量”,“全局变量”申明在函数外部,可供所有函数使用,而“局部变量”申明在函数体内部,只能在定义该变量的函数体内使用。

    (备注:在申明变量时没有var关键字,而是直接赋值的变量均为全局变量)

    <script type="text/javascript">
      function main() {  
        n = 10;//这里的n为全局变量,可以被外部直接使用
      }
      main();
      alert(n);
    </script>

    2、 在函数体内,局部变量的优先级高于全局变量。

    <script type="text/javascript">
      //网上看到的我认为很有代表性的一个例子,在函数体外部和内部都申明了相同名字的变量,变量的作用域问题,例子如下:
      var n = 1;
      function test() {
        alert(n); //这里的a并不是全局变量,原因是函数体第四行申明了一个相同重名的局部变
             //量a,如果把第四行a的申明注释掉,那么这里的a显示1,为全局变量。所以得
             //出结论:全局变量a被局部变量a覆盖了。
             //说明了JS函数在test()在执行前,函数体内的变量a都指向了局部变量,但本
             //行输出的a在执行过程中还没有被赋值,所以显示undefined。
        n = 2;
        alert(n);
        var n; //本行申明局部变量a
        alert(n);
      }
        test();
        alert(n);
    </script>

    按照我的理解,上面例子最后输出的答案应该是:1 2 2 1;但是正确的答案是:undefined 2 2 1; 原因就是函数体外部和内部都申明了相同名字的变量时,局部变量覆盖了全局变量。

    3、 外部怎么读取函数体内部的局部变量呢?

    一般来说,只有函数体内部可以直接得到外部的全局变量,但是外部要得到函数体内部的局部变量是不行的。但是,通过在函数体内部再定义一个函数返回局部变量,再从外部调用函数就能实现了。

    <script type="text/javascript">
      function f1() {    
        var n = 10;    
        function f2() {//在f1()内部再定义f2(),通过f2()访问f1()中的局部变量      
          alert(n);    
        }    
        return f2;//返回f1()局部变量n
      }  
      var result = f1(); //在外部调用f1()函数,就能获取局部变量n的值
      result(); // 10,即为n的值
    </script>
  • 相关阅读:
    LVS,NET,TUNL,DR实现负载均衡
    Redis的基本数据结构,基本操作
    mongoDB基本操作
    mysql高级操作(优化)
    sphix使用及即时索引配置
    java client 通过zookeeper连接hbase问题
    TCP/UDP load balance
    Hacking your way to enlightenment with Kafka and Node.js
    flume问题
    linux点滴
  • 原文地址:https://www.cnblogs.com/dare/p/10523402.html
Copyright © 2011-2022 走看看