クロージャーに関する mozdev の記事を読んでいますが、次のフィドルの例があります。
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
アイデアは、クリックイベントからサイズを指定してmakeSizerを呼び出し、フォントサイズを変更することです。しかし、名前のない関数を切り取ってこれを行うと:
function makeSizer(size) {
document.body.style.fontSize = size + 'px';
}
size16 のリンクがクリックされ、リンクにオンクリック イベントがなくなったかのように、クリック可能なリンクは効果を失い、フォント サイズは直接最大になります。追加return
しても動作は変わりません。
(私が何について話しているのかわからない場合は、例の上にあるリンクをクリックしてください。フィドルがあります)
私の質問は、なぜこれにクロージャー/コールバックが必要なのですか? 簡単なステートメントが機能するべきではありませんか?関数の呼び出しに関するものである場合、スクリプトがロードされた後に機能しないのはなぜですか? 関数呼び出しが呼び出しを待つのではなく、サイズを直接変更するようになった (そして size16 が最後に呼び出された) ため、デフォルトで最後のサイズになる理由がわかりましたが、ページが読み込まれた後に機能しないのはなぜですか?