美文网首页
「JS」闭包

「JS」闭包

作者: Rella7 | 来源:发表于2018-10-10 16:19 被阅读0次
    • 闭包
      • 闭包的应用
        • 保存变量现场
        • 封装

    闭包

    • 闭包有函数和与其相关的引用环境的组合而成
    • 闭包允许函数访问其引用环境中的变量(又称自由变量)
    • 广义上来说,所有 JavaScript 的函数都可以成为闭包,因为 JavaScript 函数在创建时保存了当前的词法环境。
    function add() {
      var i = 0;
      return function() {
        alert(i++);
      }
    }
    var f = add();
    f();
    f();
    

    闭包的应用

    保存变量现场

    
    // 错误方法
    var addHandlers = function(nodes) {
      for (var i = 0, len = nodes.length; i < len; i++) {
        nodes[i].onclick = function(){
          alert(i);
        }
      }
    }
    
    // 正确方法
    var addHandlers = function(nodes) {
      var helper = function(i) {
        return function() {
          alert(i);
        }
      }
    
      var (var i = 0, len = nodes.length; i < len; i++) {
        nodes[i].onclick = helper(i);
      }
    }
    

    封装

    
    // 将 observerList 封装在 observer 中
    var observer = (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/kstmaftx.html