3

次のようなスクリプトを使用しているほとんどの人を知っています

(function(){})();

匿名関数呼び出し用。しかし、周囲の括弧の機能は何ですか?

var g = (); // syntax error, why?
var g= (function(){}); // correct

誰か説明してくれませんか?

4

4 に答える 4

1

関数式の周りの括弧は、それを式にすることです。

名前付き関数の構文は似すぎているため、関数式は括弧なしでは機能しません。

function(){}();
        ^
        |______ syntax error, function name expected

関数式が使用される他のケースでは、それが式でなければならないことはすでにわかっています。たとえば、次のようになります。

var f = function(){};
于 2013-05-28T09:16:20.157 に答える
1

()JavaScript 内のいくつかの目的で使用されます。

メソッド呼び出し

演算子として使用すると、オプションでパラメーターのリストを指定して、関数を呼び出すために使用されます。

var a = function() { console.log(23); }
a() // => 23

これは、クロージャーを作成するために直接呼び出される無名関数を使用する場合に見られます。あなたの例のように:

(function(){})();

私はほとんどの人がこのように書くと思いますが:

(function(){}());

関数がグループ化され、式が全体の一部であることを示します。これは、別の使用例につながります。

式のグループ化

()式をグループ化するために使用できます。このような:

(1,2,3);

()は構文エラーになります。しかし、これはうまくいくでしょう:

a = (1,2,3);
console.log(a); // => 3

あなたの例ではそうです:

var g = (function(){});

g値として無名関数が割り当てられています。これも機能します:

var g = function() {};

同じ効果。

グループ化はすぐに役立つわけではありませんが、クロージャー用の無名関数を作成することを考えると、非常に重要です。

function() {
    // your code
}(); // => Syntax Error

しかし、これはうまくいきます:

(function() {
    return 12;
}());

式がグループ化されているため。

于 2013-05-28T09:29:09.887 に答える
0
  1. (function(){})();. これは、即時呼び出し関数式 (IIFE) です。これは、衝突を避けるために使用される非常に一般的なパターンです。この記事を参照してください。

  2. var g= (function(){}). これは有効な変数割り当てです。実際、このステートメントを実行した後、g 変数には関数が含まれています。これを試してみましょう:

      var g = (function(){console.log('hello')});
      g();
    
  3. var g = ();. これは、言語仕様の有効な構文ではありません。詳細については、ECMAScript 言語仕様を参照してください。

于 2013-05-28T09:19:04.023 に答える