Javascript 閉包的祕密

Javascript 中的閉包其實很改語言中很難理解的一部分。感謝 Stuart 提供了那麼棒的 PPT,它深入淺出的解釋了 Javascript 的閉包技術。

而我“自作主張”地在這份 PPT 中加入了部分的註釋(希望沒有影響閱讀),主要的內容在這裏簡要整理下。

閉包的概念

“官方”的解釋

“閉包”,是指擁有多個變量和綁定了這些變量的環境的
表達式(通常是一個函數),因而這些變量也是該表達式
的一部分。

但不要咬文嚼字,我們簡單的可以理解爲

閉包是個函數,而它“記住了周圍發生了什麼”。表現爲由“一個函數”體中定義了“另個函數”
  1. function outer () {
  2.     ...
  3.     function inner () {
  4.         ...
  5.     }
  6. }

閉包的作用

  1. setTimeout/setInterval
  2. 回調函數(callback)
  3. 事件句柄(event handle)

模塊化代碼

  1. function Container(param) {
  2.     var sercert = 3;
  3.     this.member = param;
  4.     var that    = this// 注意這行
  5.     function dec() {
  6.         return (sercert > 0) ? --secret : false;
  7.     }
  8.     this.service = function() {
  9.         return (dec()) ? that.member : null;
  10.     }
  11. }

其中 dec 爲私有,that 變量引用 Container 同時 service 函數構成了個閉包。

注意 Exploer 下閉包的“特殊情況”

  1. 循環問題
  2. 垃圾回收

最後,PPT 可以在這裏下載,同時需要進一步有關閉包的信息,爲之漫筆翻譯了份很詳實的文檔,強烈建議看下。


原文:http://www.gracecode.com/Archive/Display/2385

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章