4
1)function () { 
    // code here...

}();

2)(function () { 
    // code here...

})();



3)(function () { 
    // code here...

}());

違いは何ですか (特に 3 番目のバリアント)? それらはすべて同じですか?

4

3 に答える 3

2

2 と 3 はまったく同じです。それらの間に機能上の違いはありません。

1 は構文エラーです。関数は括弧で囲まれていないため、関数宣言として扱われます。関数宣言に名前を付ける必要があるため無効です。括弧はそれを「関数式」にします。これらは名前を付ける必要はありません。

于 2011-10-04T11:16:21.090 に答える
2

最初のものは構文エラーを出します。2 番目と 3 番目のバージョンは無名関数を定義し、すぐに実行します。2 番目と 3 番目のバージョンは、即時呼び出し関数式とも呼ばれます。

このような別のバージョンに遭遇することもあります。これは機能的には 2 番目と 3 番目のバージョンと同じですが、戻り値を否定するだけです。

!function() {
   //some code
}()
于 2011-10-04T11:18:55.533 に答える
2

最初のものは有効ではありませんが、代わりに次のようにして機能させることができます。

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)」と呼ばれ、「あいまい」と発音されています!

于 2013-03-08T14:25:38.197 に答える