閉包

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

    閉包

    • 閉包有函數(shù)和與其相關(guān)的引用環(huán)境的組合而成
    • 閉包允許函數(shù)訪問其引用環(huán)境中的變量(又稱自由變量)
    • 廣義上來說,所有 JavaScript 的函數(shù)都可以成為閉包,因?yàn)?JavaScript 函數(shù)在創(chuàng)建時(shí)保存了當(dāng)前的詞法環(huán)境。
    function add() {
      var i = 0;
      return function() {
        alert(i++);
      }
    }
    var f = add();
    f();
    f();
    

    閉包的應(yīng)用

    保存變量現(xiàn)場(chǎng)

    
    // 錯(cuò)誤方法
    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;
        }
      };
    })();


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)