闭包

2018-07-10 16:18 更新
    Table of Contents generated with DocToc

    闭包

    • 闭包有函数和与其相关的引用环境的组合而成
    • 闭包允许函数访问其引用环境中的变量(又称自由变量)
    • 广义上来说,所有 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;
        }
      };
    })();


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号