今回は、js クロージャーの使用について詳しく説明します。js クロージャーを使用する際の 注意事項 は何ですか?実際のケースを見てみましょう。
クロージャは関数とその関数が宣言された語彙環境の組み合わせです クロージャの最初の例function init() {
var name = 'Mozilla'; // name is a local variable created by init
function displayName() { // displayName() is the inner function, a closure
alert(name); // use variable declared in the parent function
}
displayName();
}
init();
because inner functions have access to the variables of outer functions, displayName() can access the variable name declared in the parent function, init().
が外部関数の変数を取得する権限を持っているからです。
2番目の例上記の例は、10 11 12を正しく出力できますか?答えは次のとおりです: いいえ、
構文エラーも報告されます....console.log(i); は 3 を 3 回出力していることがわかりました。つまり、setTimeout 1000 ミリ秒後、実行は終了します 関数をラップすると、
for ループの実行が終了し、i は固定値となり、期待した効果が得られません。 console.log(this); は、これが Window を指していること、つまり、関数内に実装されたクロージャ関数が
グローバル関数に変換され、メモリに格納されていることがわかりました。 そのため、別の実行関数を定義する必要があります
var data = [ {'key':0}, {'key':1}, {'key':2} ]; function showKey() { var f1 = function(n){ data[i].key = data[i].key + 10; console.log(data[i].key) } for(var i=0;i<data.length;i++) { setTimeout(f1(i), 1000); } } showKey(); // 得到预期的 10 11 12
この記事のケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。 推奨読書:
Vue カスタム動的コンポーネントの使用方法の詳細な説明 js でタイムシェアリング関数を使用する手順の詳細な説明以上がjsクロージャの使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。