2

重複の可能性:
自己実行機能が機能しない?

Javascript では、なぜ

function() { console.log('hello'); }();

エラーを出しますが、

function() { console.log('hello'); }()

いいえ?

編集: いくつかの回答では、どちらも Firefox で構文エラーが発生すると述べていますが、これは Chrome または Node.js REPL のいずれにも当てはまらないようです。さらに、

(function() { console.log('hello'); }());

Firefox では問題なく動作するようです。

4

5 に答える 5

2

実際には両方とも SyntaxErrors です。

適切に解析できるように、無名関数を括弧で囲む必要があります。

(function(){alert('eyo')})();

これにより、関数が定義され、すぐに呼び出されます。関数を定義し、括弧で囲んで関数を「形成」せずに呼び出すことは、構文的に有効ではありません。

ここでの良い説明: http://benalman.com/news/2010/11/immediately-invoked-function-expression/

幸いなことに、SyntaxError の「修正」は簡単です。パーサーに関数式を期待するように指示する最も広く受け入れられている方法は、単に括弧で囲むことです。JavaScript では、括弧にステートメントを含めることができないためです。この時点で、パーサーは function キーワードに遭遇すると、それを関数宣言ではなく関数式として解析することを認識します。

于 2012-07-31T21:42:59.393 に答える
0

他の人が指摘したように、割り当てと表現には違いがあります

自己実行関数は、式に変換された関数です。

// self-executed due to both being an expression, no function declaration.
!function(foo) { console.log('test', foo); }('first');
(function(foo) { console.log('test', foo); })('second');

// long-hand examples of normal usage without expression conversions.
var bar = function(foo) { console.log('test', foo); };
bar('third');

前のものが呼び出し可能なすでに宣言された関数または式のいずれかである場合にのみ、後で最も少ないparens "()"を持つ引数を渡すことができます。

edit://ネゴシエーターの例を追加しました。これにより、次のキーワードが式に変換されます。式は常にtrueまたはfalseを返します。

于 2012-07-31T21:56:38.703 に答える
0
(function() { console.log('hello'); })();

いくつかの関数を呼び出す必要があります。この場合は「()」です

いいえ、構文エラーはありません

于 2012-07-31T21:41:29.180 に答える
0

Firefox では、両方の行で同じエラーが生成されます。

SyntaxError: function ステートメントには名前が必要です

これを修正するには、括弧を追加するだけです:

(function() { console.log('hello'); })();

構文エラーを示しているため、エラーが発生した可能性があります。

function (value) {
    return value * value;
}

関数名が欠落しており、無名関数が意図されていないことは明らかです。

したがって、変数を代入する場合など、無名関数は常に式として発生する必要があります。

var a = function() { };

それ以外の場合は、括弧が必要です。

于 2012-07-31T21:42:39.287 に答える
0

後に続く匿名関数()は、基本的に「この関数をすぐに呼び出す」と言っていますが、構文は正しくありませ()ん。これは、ラッピングの親がなければ、何にもアタッチされないためです(例外があり、匿名関数を等しく設定した場合変数に、大丈夫ですが、あなたはそれをしませんでした...コメントを参照してください)。

したがって、次のようにする必要があります。( function(){} )()

次のように考えてください。

1. ( someExpressionReturnsFunction )(2)
2. is now: aFunction(2)
于 2012-07-31T21:45:49.637 に答える