1

独自の目的でいくつかの変数を定義する必要がある JavaScript コードを呼び出したいのですが、グローバル スコープを汚染しないようにこれを分離したいと考えています。したがって、すべてを匿名関数オブジェクトにラップし、すぐに呼び出して、それまたは結果を何にも代入しません。

function() {
    var myInnerHelperFunction = function(object) {
        //do some work
    };

    var anObject = ...;

    myInnerHelperFunction(anObject);
}();

しかし、構文エラーが発生します。SyntaxError: Unexpected token (

4

1 に答える 1

8

関数宣言を呼び出すことはできません。代わりに式にする必要があります。これを実現するための最も一般的な手法は、関数を括弧で囲むことです。

(function() {
    var myInnerHelperFunction = function(object) {
        //do some work
    };

    var anObject = ...;

    myInnerHelperFunction(anObject);
}());

ただし、任意の単項演算子も機能することに注意してください (構文が宣言ではなく式として解析される原因となるものはすべて)。

~function example() {
    console.log("example");
}();

これをさらに拡張すると、関数に識別子がないため、コードは実際に構文エラーをスローします。「プログラム」には、ステートメントと関数宣言のみを含めることができます。したがって、コードは関数宣言として解析する必要があります。関数宣言には識別子が必要です。あなたのものはそうではないので、あなたのプログラムは無効です。

関数を括弧で囲むと、解析ツリーが異なります。括弧は、式を含めることができる「式ステートメント」として解析されます。関数は、出現するコンテキストに応じて式または宣言として解析できるため、これは正当であり、関数は式として解析されます。関数式はすぐに呼び出すことができるため、これは機能します。

于 2013-02-14T14:01:47.830 に答える