4

重複の可能性:
(function(window, document, undefined) { … })(window, document) を使用するとどのような利点が得られますか?
高度な Javascript: この関数が括弧で囲まれているのはなぜですか?

jqueryの記述方法を確認したところ、最初の行に次のように表示されます。

(function( window, undefined ) {

});

(私の質問は、関数の宣言がand内にある意味または理由は何)ですか?

4

5 に答える 5

4

あなたの例では、括弧の理由がわかりません。

すぐに呼び出される関数については、Douglas Crockford が以下のコード サンプルを推奨し、提供しています。ソースはhttp://javascript.crockford.com/code.htmlです

関数がすぐに呼び出される場合、生成される値が関数自体ではなく関数の結果であることを明確にするために、呼び出し式全体を括弧で囲む必要があります。

var collection = (function () {
    var keys = [], values = [];

    return {
        get: function (key) {
            var at = keys.indexOf(key);
            if (at >= 0) {
                return values[at];
            }
        },
        set: function (key, value) {
            var at = keys.indexOf(key);
            if (at < 0) {
                at = keys.length;
            }
            keys[at] = key;
            values[at] = value;
        },
        remove: function (key) {
            var at = keys.indexOf(key);
            if (at >= 0) {
                keys.splice(at, 1);
                values.splice(at, 1);
            }
        }
    };
}());
于 2013-01-22T15:49:48.340 に答える
2

実際、最初の行は次のようになります。

(function( window, undefined ) {

})( window );

これは、すぐに呼び出される関数式です。

于 2013-01-22T15:49:12.837 に答える
1

間違って入力しました。おそらく次のように書かれています。

(function(...) {

    // script

})(...);

競合を避けるために使用されます。これは自己呼び出し関数です。最後に括弧があるため、それ自体を呼び出します。

この関数内で定義されたすべての変数、オブジェクト、および関数は、この関数内にとどまります。

于 2013-01-22T15:49:19.670 に答える
1

参照: http://www.ecma-international.org/ecma-262/5.1/#sec-12.4

これは、ECMAScript (および JavaScript) 構文の一部にすぎません。

無名関数をすぐに呼び出すには括弧が必要です。

function () {}()構文エラーが発生します。ただし、これらのいずれかが機能します。

(function () {}())
(function () {})()

要点は、関数のすべての内容をラップして、外部変数が関数に漏れないようにすることです (逆も同様です)。匿名であるため、グローバル関数宣言も追加されていません。

于 2013-01-22T15:52:05.843 に答える
0

SLak は既にリンクされているため、自己実行機能です。内部の 2 つのパラメーターについては、パフォーマンスとセキュリティという別の理由があります。

パフォーマンスに関しては、javascript は自分自身を調べて変数を探します。ご想像のとおり、ローカル変数は常に最速です。

未定義セクションの例を次に示します。ハッカーは次のように言うことができます。

undefined = null;

そして今、あなたのコードは失敗しており、バグやものがあります.

これがお役に立てば幸いです。

于 2013-01-22T15:55:35.103 に答える