リソースを解放していないスタック領域と実行前プロセスとは何ですか? 最も一般的な例を使用して説明します。
たとえば、その下に多くの li がある ul があり、それらを走査してバインドする必要があります。イベントをクリックした後、追加の処理のために現在の添え字を別の関数に渡します。
for(var i=0; i
agroup[i].onclick = function() {
handler(i); 🎜> }
}
ハンドラーで、渡されたパラメーター i を取得すると、通常、この時点で最大の添字が表示されます。次のメソッドを使用します。 解決策:
for(var i=0; i
agroup[i].i = i
agroup[i].onclick = function() {
ハンドラー (this.i); >}
}
そこで、ここで this のポインティングの問題について話しましょう。一般的に、JavaScript の this は現在それを参照しているオブジェクトを指します。上では、これに i という新しい属性を追加しました。その値は現在の添字値です。
では、クロージャを使用してこの問題を解決するにはどうすればよいでしょうか?実際、原理は同じです。i 値を事前に保存するか、転送と呼ぶ必要があります。
for(var i=0; i
agroup[i].onclick = function(index) {
return function() {
handler (index);
}
}(i);
このとき、正しい添字が得られます。 i 属性を追加するのと似ていますか?つまり、それらはすべて、事前に添え字 i の値を渡すか、保存します。上記のデモでは、onclick で参照される関数が事前実行されており、この
関数はインライン関数を返し、リソースが解放されていないスタック領域を形成し、事前実行中に i の値がパラメーターに変更されます。このスコープにはフォームが渡されます(説明能力に問題があります。この説明が正確かどうかはわかりません。試してください)。 要約すると、クロージャの役割は通常、スコープまたは実行前を変更することです。読者にとって、上記の例は非常に限られたものであることは明らかです。クロージャの適用範囲は、その原因と結果を理解することによって初めて柔軟に使用できるようになります。
auntion 2011-11-15
mail Auntion@gmail.com
QQ 82874972
オリジナルの記事です。入力の労力と著者の権利を尊重してください。著者情報は削除しないでください。再版の際はこちら。