iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0

函式在呼叫時,會建立 Scope 與 閉包,那什麼是閉包呢?
我們知道變數宣告只會在 Scope 內可以存取,以外是不能存取的。
閉包是當 function 呼叫時,會去記憶當下呼叫執行時 Scope 內的狀態。
這樣講一定很模糊先來看範例:

    var countCreate = function () {
    	var count = 0;
    	return function () {
    		count++;
    		console.log(count);
    	}
    }
    
    var count1 = countCreate();
    count1() // 1
    count1() // 2

這是很簡單計數器的範例,countCreate 在呼叫之後,return 一個 function,呼叫之後會在 +1

看完之後有一個很奇怪的地方是,count1 照理說 function 呼叫完不是就結束了不會記錄 var count 的狀態啊, 理想上應該每次呼叫 count1 應該都要是 1,但結果不是為什麼,因為剛剛提到 function 建立時會產生閉包,所以會記錄當下的 count 到記憶體,所以在你每次 call count1

這個 function 中的 count 會從剛剛建立的閉包記憶體中去連接之前的狀態。


上一篇
Day 17 this 的變化
下一篇
Day 19 Prototype
系列文
30 天 node.js 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言