1)function () {
// code here...
}();
2)(function () {
// code here...
})();
3)(function () {
// code here...
}());
違いは何ですか (特に 3 番目のバリアント)? それらはすべて同じですか?
1)function () {
// code here...
}();
2)(function () {
// code here...
})();
3)(function () {
// code here...
}());
違いは何ですか (特に 3 番目のバリアント)? それらはすべて同じですか?
2 と 3 はまったく同じです。それらの間に機能上の違いはありません。
1 は構文エラーです。関数は括弧で囲まれていないため、関数宣言として扱われます。関数宣言に名前を付ける必要があるため無効です。括弧はそれを「関数式」にします。これらは名前を付ける必要はありません。
最初のものは構文エラーを出します。2 番目と 3 番目のバージョンは無名関数を定義し、すぐに実行します。2 番目と 3 番目のバージョンは、即時呼び出し関数式とも呼ばれます。
このような別のバージョンに遭遇することもあります。これは機能的には 2 番目と 3 番目のバージョンと同じですが、戻り値を否定するだけです。
!function() {
//some code
}()
最初のものは有効ではありませんが、代わりに次のようにして機能させることができます。
var myfunction = function () {
// code here...
}();
他の回答が2番目と3番目に違いはないと指摘したように、それらは同じです。
括弧を使用する代わりに、次も有効です。
!function() { /* code here... */ }();
~function() { /* code here... */ }();
+function() { /* code here... */ }();
-function() { /* code here... */ }();
new function() { /* code here... */ };
new function(arguments) { /* code here... */ }(arg);
注:人々はこれらの関数を「自己実行匿名関数」と呼んでいましたが、この用語は正しくありません。現在、それらは「即時呼び出し関数式 (IIFE)」と呼ばれ、「あいまい」と発音されています!