6

私は、次のように記述された関数呼び出しを使用して、時間の黎明期から大量のJavaScriptを使用しています。

THING.someFunction.call(THING);

私には、常に次のものと同等である必要があるように思われます。

THING.someFunction();

これらの2つの呼び出しは常に同等ですか?古いバージョンのJavaScriptはどうですか?

THINGコードの最初の行の2番目の目的は、this内部にコンテキスト()を設定することであるように思われますsomeFunctionTHINGしかし、その関数内のコンテキストはすでにデフォルトになっているはずですよね?

明確にするために、THING次のように定義されています。

var THING = function () {
    // private vars

    return{
        // code
        someFunction : function () {
            // code
        }
    };
}();
4

2 に答える 2

1

はい、同等です。そして、JavaScriptが含まれていないバージョンはわかりません(ただし、call1.3で追加されたようです)。

于 2013-01-23T21:55:00.590 に答える
0

それらは技術的には同じです。ただし、非同期プログラミングでは動作が少し異なります。call()は、スコープをパラメーターとして渡すことによって関数を呼び出すために使用されます。これは、コールバックおよび遅延実行(setTimeout、setInterval)で定義された関数を呼び出すための便利な方法を提供します。JSライブラリのいずれかを使用したことがある場合は、$。proxyまたは_.bindに気付くでしょう。これらは、call(scope)を実装するエイリアスです。

詳細については、このMDNドキュメントを参照してください。

于 2013-01-23T22:43:43.870 に答える