私は本を読んでいて、secrets of the js ninja
このようなコードをよく見ました
(function(){
something here;
})();
なぜ関数を括弧で囲む必要があり、その後にもう 1 組の括弧を追加する必要があるのでしょうか?
私は本を読んでいて、secrets of the js ninja
このようなコードをよく見ました
(function(){
something here;
})();
なぜ関数を括弧で囲む必要があり、その後にもう 1 組の括弧を追加する必要があるのでしょうか?
スクリプトがロードを完了すると、それ自体を呼び出す自己呼び出し関数です。引数なしで呼び出すことも、 または などの引数を追加することもできwindow
ますdocument
。
jQuery が使用する方法で使用します。
(function( window, undefined ) {
// jQuery code
})(window);
同じことを行う (ほぼ) 代替構文:
! function( window, undefined ){
// some code…
}(window);
詳細については、http ://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/ をご覧ください。
これ
(function(){
alert('hello');
})();
これは関数ですが、自動的に呼び出されるため、手動で呼び出すことはできません/できません
for
これらは、次のようなループに役立ちます
i は 5 秒後に 9 になるため、これは失敗します。
for(var i = 0; i < 10; i++) {
window.setTimeout(function(){
console.log(i);
}, 5000)
}
だからあなたはこれを行うことができます
for(var i = 0; i < 10; i++) {
(function(a){
window.setTimeout(function(){
console.log(a);
}, 5000)
})(i);
}
このような「プライベート」スコープを作成するのにも適しています
(function(){
var test = 'hello';
console.log( test ); // 'hello'
}());
console.log( test ); // 'undefined'
括弧の最後のセットにより、関数がすぐに実行されます。関数は、どこにも割り当てることなく作成および実行されます。このような関数でコードをラップする理由は、コードをカプセル化するためです。たとえば、次のようにします。
var myVar = 'whatever';
function shout() { alert(myVar); }
ここでは、グローバル変数になっているだけですmyVar
。shout
コンソールを開いてwindow.myVar
orwindow.shout
と入力すると、これらの変数にアクセスして変更できます。関数でラップすることにより、これらの変数は外側の関数に対してローカルのままになります。
(function() {
var myVar = 'whatever';
function shout() { alert(myVar); }
})();
window.myVar
およびwindow.shout
未定義です。その関数内にのみ存在します。
このパターンは、ローカル変数の周りにクロージャーを作成するためにも使用されます。ループ内の JavaScript クロージャー – 簡単な実用例を参照してください。
自己呼び出し関数、基本的にはすぐに自分自身を呼び出します。
通常、jQuery などの変数を渡すために使用され、それ$
が本当に jQuery オブジェクトであることを確認します。
(function($){
// $ now is equal to jQuery
})(jQuery);
作成したばかりの関数が実行されます。これを行う理由は、記述したすべてのコードが新しいスコープ内に含まれるためです。これは、 と を定義するvars
と、作成したばかりfunctions
の の範囲内に保持されることを意味します。function()
つまり、コードをカプセル化します。