js闭包

作者: angelwgh | 来源:发表于2016-11-24 21:08 被阅读0次

    title: js闭包
    date: 2016-11-24 20:46:00
    tags: javascript
    categories:

    • javascript

    闭包是什么

    function add(){
        var i = 0;
        return function(){
            alert(i++);
        }
    }
    
    var f= add();
    f();
    f();
    

    代码执行时函数内部会创建一个词法环境,add()返回一个函数并赋值给f,这导致add()词法环境里的变量i没有被释放,这就构成了一个闭包,每次执行f()时,i都会被保存

    • 闭包是由函数和与其相关的引用环境的组合而成
    • 闭包允许函数访问其引用环境中的变量(又称自由变量)
    • 广义上来说,所欲js函数都可以称为闭包,因为js函数在创建时保存了当前的词法环境

    闭包的应用

    • 保存现场
    function addHandlers (nodes) {
      function helper (i) {
        return function () {
          alert(i)
        }
      }
      for(var i = 0 ; i < nodes.length ; i++){
        nodes[i].onclick = helper(i)
      }
    }
    

    helper()每次执行都会创建一个独立的执行环境i

    • 模块封装
    var observe = (function () {
      var observerList=[];
      return{
        add: function (obj) {
          observerList.push(obj);
        },
        empty:function () {
          observerList = [];
        },
        getCount:function () {
          return observerList.length;
        }
        get:function () {
          return observerList;
        }
      }
    })
    

    相关文章

      网友评论

          本文标题:js闭包

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