2017-07-07 18 views
0

私はjavascriptクロージャのexpempleを読んでいました。私が理解していないことが1つあります。ここでJavascript closure vs regular function

はexempleです、私は理解してどのようなFidle Exemple

あなたは元のための要素サイズ-12をクリックしたとき、あなたは無名関数を実行しますです:ここで

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; 

がいっぱいexempleですこれは私が理解していない何12

にサイズを変更し、あなたがコードをこのように変更した場合である:

function makeSizer(size) { 

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

} 

クリックイベントでsize12ではなくmakeSizer(12)を呼び出すと動作しません。

私はこれが何を閉鎖するのか興味深いですが、なぜ私の修正が機能しないのですか?

Regard、 チャールズ。

+0

"うまくいかない"とはどういう意味ですか?完全な「うまくいかない」例を示し、あなたがそれからどんな結果を期待するか説明してください。 – zerkms

+0

'onclick'は' function'を期待しているので、 'makeSizer(12)'を変更して使用すると、その関数を実行し、返されるものに 'onclick'を設定します。この場合、' undefined'です。 'size12'を使って変更しても動作しません。 – George

+0

クエンティンは私の質問が重複していたので、今私は間違いを理解しています。すべてのあなたの答えをありがとう! – Charles

答えて

1

onclickプロパティは、渡される関数が必要です。 2番目の例では、makeSizer(12)は関数ではなく関数呼び出しです。それを動作させるには、次のような無名関数の中に値を入れる必要があります:

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