Day21 閉包
今天來看看closure閉包
先來看看以下程式碼:
function say(whattosay){
return function(name){
console.log(whattosay + ' ' + name);
}
}
設定一個函式陳述句,在裏頭用函式表示式回傳一個函式,並利用範圍練scope chain的特性放入whattosay,裏頭這個回傳函式沒有宣告whattosay,於是它會外部(參照)查找,去找設定這個函式的say函式參數whattosay。
關於外部參照,可以參考這天的筆記。
當我們呼叫函式say,會得到一個值,這個值是從函式say裡面return返回的另一個函式。我們可以帶入參數,這樣呼叫函式裡的函式:
say('Hello')('Simon');
目前這樣還OK
接著修改一下程式碼,設定一個變數去接(指向)函式say的回傳值:
var talk = say('Hello');
talk('