codecamp

闭包

    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,免费阅读超1000+编程语言教程
取消
确定
目录

书单

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }