鍍金池/ 教程/ HTML/ 閉包
書單
JavaScript 動畫
HTML
CSS Reset
屬性操作
DOM 事件
閉包
Photoshop
Atom 文本編輯器
表單操作
布局解決方案
類型系統(tǒng)
開發(fā)實踐
數(shù)據(jù)通信
變量作用域
BOM
JavaScript 程序設(shè)計
前端工程師概述
CSS
響應式布局
表達式與運算符
基本語法
JavaScript 介紹
版本控制
布局
調(diào)試器
背景
圖片保存
多媒體
文檔樹
列表操作
Sublime 編輯器
盒模型
常見布局樣例
類型識別
變形
數(shù)據(jù)存儲
選擇器
頁面架構(gòu)
開發(fā)及調(diào)試工具
頁面模塊化
節(jié)點操作
測量及取色
瀏覽器兼容
HTML 簡介
內(nèi)置對象
實體字符
產(chǎn)品前端架構(gòu)
協(xié)作流程
切圖
工具, 面板, 視圖
正則表達式
動畫
語句
面向?qū)ο?/span>
HTML 語法
HTML 標簽
技術(shù)選擇
樣式操作
圖片優(yōu)化與合并
語法
DOM 編程藝術(shù)
Canvas
接口設(shè)計
頁面優(yōu)化
文本

閉包

閉包

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

閉包的應用

保存變量現(xiàn)場


// 錯誤方法
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;
    }
  };
})();
上一篇:測量及取色下一篇:列表操作