美文网首页前端开发宝典WEB前端程序开发Web前端之路
Javascrip 之 变量作用域 & 封闭函数 &am

Javascrip 之 变量作用域 & 封闭函数 &am

作者: 奋斗的老王 | 来源:发表于2018-03-24 10:20 被阅读18次

变量作用域

变量作用域指的是变量的作用范围,javascript中的变量分为全局变量和局部变量。

  • 1、全局变量:在函数之外定义的变量,为整个页面公用,函数内部外部都可以访问。
  • 2、局部变量:在函数内部定义的变量,只能在定义该变量的函数内部访问,外部无法访问。
      <script type="text/javascript">
          //全局变量
          var a = 12;
          function myalert()
          {
              //局部变量
              var b = 23;
              alert(a);
              alert(b);
          }
          myalert(); //弹出12和23
          alert(a);  //弹出12    
          alert(b);  //出错
      </script>
    

封闭函数

  • 封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。

  • 一般定义的函数和执行函数:

    function changecolor(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    }
    changecolor();
    
  • 封闭函数:

    (function(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    })();
    
  • 还可以在函数定义前加上“~”和“!”等符号来定义匿名函数

    !function(){
    var oDiv = document.getElementById('div1');
    oDiv.style.color = 'red';
    }()
    

闭包

  • 什么是闭包

    • 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回

      function aaa(a){      
            var b = 5;      
            function bbb(){
                 a++;
                 b++;
               alert(a);
               alert(b);
            }
            return bbb;
        }
      
       var ccc = aaa(2);
      
       ccc();
       ccc();
      
    • 改写成封闭函数的形式:

      var ccc = (function(a){
      
        var b = 5;
        function bbb(){
             a++;
             b++;
           alert(a);
           alert(b);
        }
        return bbb;
      
      })(2);
      
      ccc();
      ccc();
      
  • 用处

    • 1、将一个变量长期驻扎在内存当中,可用于循环中存索引值

      <script type="text/javascript">
          window.onload = function(){
              var aLi = document.getElementsByTagName('li');
              for(var i=0;i<aLi.length;i++)
              {
                  (function(i){
                      aLi[i].onclick = function(){
                          alert(i);
                      }
                  })(i);
              }
          }
      </script>
      ......
      <ul>
          <li>111</li>
          <li>222</li>
          <li>333</li>
          <li>444</li>
          <li>555</li>
      </ul>
      
    • 2、私有变量计数器,外部无法访问,避免全局变量的污染

      <script type="text/javascript">
      
      var count = (function(){
          var a = 0;
          function add(){
              a++;
              return a;
          }
      
          return add;
      
      })()
      
      count();
      count();
      
      var nowcount = count();
      
      alert(nowcount);
      
      </script>
      

相关文章

  • Javascrip 之 变量作用域 & 封闭函数 &am

    变量作用域 变量作用域指的是变量的作用范围,javascript中的变量分为全局变量和局部变量。 1、全局变量:在...

  • 封闭函数和闭包

    变量的作用域 封闭函数 用变量的方式定义函数 闭包

  • 倒计时、变量的作用域、封闭函数、用变量的方式定义函数

    倒计时: 变量的作用域: 封闭函数: 用变量的方式定义函数:

  • JS闭包理解

    闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包,首先必须理解Javascrip...

  • ES6中let与var的区别

    通过var定义的变量,作用域是整个封闭函数,是全域的 。通过let定义的变量,作用域是在块级或是子块中。 变量提升...

  • Scope

    1. 全局作用域 全局变量拥有全局作用域 2. 函数作用域 在函数内声明的变量用于函数作用域。在函数体内,局部变量...

  • 变量的作用域、封闭函数、用变量的方式定义函数、闭包

    变量的作用域 全局变量:函数外部定义的变量,函数内部和外部都可以访问,它的值可以共享 封闭函数 全局变量:函数外部...

  • Python函数复习

    本章重点: 掌握函数参数传递 变量的作用域 lambda函数 函数定义: 一、变量的作用域 作用域顾名思义是指变量...

  • 函数作用域&&作用域链

    注意:函数作用域和变量作用域并不是一个概念,在学习函数作用域时可以先暂时忘记变量作用域的概念。 怎么理解函数作用域...

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

网友评论

    本文标题:Javascrip 之 变量作用域 & 封闭函数 &am

    本文链接:https://www.haomeiwen.com/subject/agqqcftx.html