0

次のコードがあります。

function myFunction(promiseObject){
     var that = this;

     promiseObject
        .done(function(){
                 //using that here
              });
}

上記の関数は複数のコンテキストで呼び出されるためthis、すべての呼び出しの変更に値します。私が直面している問題は、多くの同時呼び出しの場合、 の値がthat、完了中の別のコンテキストによってオーバーライドされることです。

この理由が何であるかを理解したかったのです。また、定義されているが添付されたコールバック メソッドで使用されるthat変数のスコープの背後にある概念は何かを理解したいと思っていました。myFunction

前もって感謝します :)

-devsri

4

1 に答える 1

4

あなたの問題を正しく理解していることを願っています。thatで定義され、コールバックでアクセスできる変数の背後にある概念はmyFunction、動作中の字句スコープです。コールバックがアクセスするためのクロージャー (基本的には、コールバックが定義されている関数の実行環境への参照) を作成しています。

thisinside ofの値は、 のmyFunction呼び出し方法によって異なりますmyFunction

に特定のコンテキストを持たせたい場合はmyFunction、次のようにそのコンテキストで呼び出す必要があります。

var myContext = { foo: "bar" };
myFunction.call(myContext);

myFunctionの内部の値はthisと等しくなりmyContextます。

の値を呼び出し間で一貫させたい場合は、どこでも正しいコンテキストでthat呼び出し/適用する必要があります。myFunction

または、underscore.js のような関数を使用できます_.bind

myFunction = _.bind(myFunction, myContext);

myFunction常に特定のコンテキストにバインドされます。

于 2013-11-07T08:18:45.047 に答える