これが何を意味するのか知りたいです:
(function () {
})();
これは基本的に言っているのですかdocument.onload
?
ベストアンサー1
それは即時呼び出し関数式、 または国際略して「」です。作成後すぐに実行されます。
これは、イベント ( などdocument.onload
) のイベント ハンドラとは何の関係もありません。
最初の括弧内の部分について考えてみましょう。これは通常の関数式です。次に、最後の のペアを見てください。これは通常、関数を呼び出す式に追加されます。この場合は、前の式です。(function(){})();
(function(){})();
このパターンは、IIFE 内で使用されるすべての変数 (他の通常の関数と同様に) がそのスコープ外では表示されないため、グローバル名前空間の汚染を回避する場合によく使用されます。
このため、この構造を のイベント ハンドラーと混同した可能性がありますwindow.onload
。これは、次のように使用されることが多いためです。
(function(){
// all your code here
var foo = function() {};
window.onload = foo;
// ...
})();
// foo is unreachable here (it’s undefined)
修正を提案したグッファ:
関数は、解析された後ではなく、作成された直後に実行されます。スクリプト ブロック全体が解析されてから、その中のコードが実行されます。また、コードを解析しても、それが自動的に実行されるわけではありません。たとえば、IIFE が関数内にある場合、関数が呼び出されるまで実行されません。
更新これはかなり人気のあるトピックなので、IIFEは次のように記述することもできることを言及しておく価値がある。ES6の矢印関数(のようにガジュス指摘したコメントで) :
((foo) => {
// do something with foo here foo
})('foo value')