可能性の重複:
What is the purpose of a self executing function in javascript?「自己の呼び出し無名関数」の目的
うまくいけば、かなりまっすぐ進むの質問:自己匿名の呼び出しを使用する目的は何
機能?変数などを使ってグローバルスコープを「汚染する」ことを単に防止するだけですか?または、それらを使用する他の利点はありますか?
可能性の重複:
What is the purpose of a self executing function in javascript?「自己の呼び出し無名関数」の目的
うまくいけば、かなりまっすぐ進むの質問:自己匿名の呼び出しを使用する目的は何
機能?変数などを使ってグローバルスコープを「汚染する」ことを単に防止するだけですか?または、それらを使用する他の利点はありますか?
は、私はまた、forループの閉鎖のためにそれを使用しています。これは、DOM要素がカウントを格納する必要があり、jQueryなどのライブラリにアクセスできない場合に便利です。
要素が100 DIV
であるとします。最初DIV
要素をクリックすると、これらの要素を作成するとき、あなたは通常のカウンタとして、これは99に警告するこの
// Assume myElements is a collection of the aforementioned div elements
for (var i = 0; i < 100; ++i) {
myElements[i].onclick = function() {
alert('You clicked on: ' + i);
};
}
ような何かを同様だから、56
を警告すべき第56回div要素をクリックすると、1に警告すべきです現在は99です。i
の値はここでは維持されません。
ただし、無名関数を問題に取り組むために使用されている場合、ここで
for (var i = 0; i < 100; ++i) {
(function(count){
myElements[count].onclick = function() {
alert('You clicked on: ' + count);
};
})(i);
}
i
の値が維持され、正確なカウントが表示されます。
グローバルスコープを変数などで「汚染」しないようにするのは簡単ですか?
かなりです。カプセル化とできるだけ多くのグローバルな状態を回避することは、それ自身の良い目標です。
わかりやすいです。 – NaveenDA
独自のスコープを作成することです。他の(例えばグローバルな)スコープを "汚染"しなくなったので、それだけではなく、関数/オブジェクト/メソッド内部の内部を突き刺すようなプログラマーからの名前衝突の懸念や防御のためのエスケープを提供しますすべてのメリットの中でまた、機能が完了したときに参照オブジェクトを必要としないことをGCが容易に理解できるようにします。
Closures in for-loopsも匿名機能を使用します。スコープを誘導するために無名関数を使用するよりも、他の私の個人的な経験のうち
function attachEventsToListItems() {
var oList = document.getElementById('myList');
var aListItems = oList.getElementsByTagName('li');
for(var i = 0; i < aListItems.length; i++) {
var oListItem = aListItems[i];
// Watch this:
oListItem.onclick = (function(value) {
return function() {
alert(value);
}
})(i);
}
}
これはIIFEとも呼ばれます。 http://benalman.com/news/2010/11/immediately-invoked-function-expression/を参照してください。 –