2017-07-07 46 views
0

我正在閱讀javascript關閉的例子。有一件事我不明白。Javascript關閉vs常規函數

這裏是爲例:

function makeSizer(size) { 
    return function() { 
    document.body.style.fontSize = size + 'px'; 
    }; 
} 

var size12 = makeSizer(12); 
var size14 = makeSizer(14); 
var size16 = makeSizer(16); 

document.getElementById('size-12').onclick = size12; 
document.getElementById('size-14').onclick = size14; 
document.getElementById('size-16').onclick = size16; 

以下是完整的爲例:Fidle Exemple

我明白了什麼,是當你點擊的元素大小-12前,將執行匿名函數其尺寸更改爲12

我不明白,是如果你改變了這樣的代碼:

function makeSizer(size) { 

    document.body.style.fontSize = size + 'px'; 

} 

並在點擊事件時調用makeSizer(12)而不是size12,它不起作用。

好吧,我得到這是什麼使封閉有趣,但爲什麼我的修改不起作用?

Regard, Charles。

+0

什麼「不工作」究竟是什麼意思?顯示完整的「不工作」示例並解釋您期望從中得到什麼結果。 – zerkms

+0

因爲'onclick'需要一個'function',所以當你使用'makeSizer(12)'進行修改時,它會執行該函數,並將'onclick'設置爲返回的內容,在這種情況下是'undefined'。即使你使用'size12'進行改變也是行不通的。 – George

+0

昆汀是正確的我的問題是重複的,現在我明白我的錯誤。感謝您的答案! – Charles

回答

1

onclick屬性期望一個函數被傳遞。在你的第二個例子中,情況並非如此,因爲makeSizer(12)不是函數,而是函數調用。爲了得到它的工作,你需要把它包起來像一個匿名函數中:

document.getElementById('size-12').onclick = function() {makeSizer(12);};