本文通过实例代码给大家详细介绍了js闭包的几种常见形式,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
 
  作用域链:
 
  //作用域链
 
    var a = 1;
 
    function test() {
 
      var b =2;
 
      return a;
 
    }
 
    alert(test());//弹出1;
 
    alert(b);//不能获取b
 
  //scope chain
 
    var a = 1;
 
    function test() {
 
      var b = 2;
 
      function test1() {
 
        var c = 3;
 
        alert(a);
 
        alert(b);
 
        alert(c);
 
      }
 
      test1();
 
    }
 
    test();//弹出1,弹出2,弹出3;
 
  词法作用域:
 
  //词法作用域;
 
    function f1() {
 
      var a = 12;
 
      return f2();
 
    }
 
    function f2() {
 
      return a;
 
    }
 
    alert(f1());//并不能获取a,a在f2()中并未定义;
 
  function f1() {
 
      var a = 1;
 
      return f2();
 
    }
 
    function f2() {
 
      var b = 3;
 
      alert(b);
 
      return a;
 
    }
 
    alert(f1());//弹出3,a在f2()中未定义
 
  function f1() {
 
      var a = 1;
 
      return f2();
 
    }
 
    function f2() {
 
      var b = 3;
 
      alert(b);
 
      return a;
 
    }
 
    alert(f1());//弹出3,a在f2()中未定义,undefined
 
    var a=55;
 
    alert(f1());//弹出3,弹出55
 
  如何通过闭包突破全局作用域链——几种常见形式
 
  //通过闭包突破全局作用域链
 
    function f() {
 
      var a = "sun";
 
      return function () {
 
        return a;
 
      }
 
    }
 
    var test = f();
 
    alert(test());//弹出sun
 
  var n;
 
  function f() {
 
    var a = "sun";
 
    n = function () {
 
      return a;
 
    }
 
  }
 
  f();
 
  alert(n());//弹出sun
 
    function f(param) {
 
      var n =function () {
 
        return param;
 
      };
 
      param++;
 
      return n;
 
    }
 
    var test = f(45);
 
    alert(test());//弹出46;
 
  以上就是JS闭包常见形式详解的详细内容。
 

dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。