我有以下代码;
function myFunction(promiseObject){
var that = this;
promiseObject
.done(function(){
//using that here
});
}
上述函数在多个上下文中被调用,因此 this
的值在每次调用中都会发生变化。我面临的问题是,对于许多并发调用,that
的值被另一个正在完成的上下文覆盖。
我想了解这可能是什么原因。还想了解在 myFunction
中定义但在附加回调方法中使用的 that
变量范围背后的概念是什么。
提前致谢:)
-devsri
最佳答案
我希望我正确理解您的问题。在 myFunction
中定义并可在回调中访问的 that
变量背后的概念是词法作用域。它正在创建一个闭包(基本上是对定义回调的函数的执行环境的引用)以供回调访问。
myFunction
中 this
的值将取决于您如何调用 myFunction
。
如果您希望 myFunction
有特定的上下文,您需要使用该上下文调用它,如下所示:
var myContext = { foo: "bar" };
myFunction.call(myContext);
myFunction 内部的 this
值现在等于 myContext
。
如果您希望 that
的值在调用之间保持一致,您需要确保在各处使用正确的上下文调用/应用 myFunction
。
或者,您可以使用像 underscore.js 的 _.bind
这样的函数:
myFunction = _.bind(myFunction, myContext);
myFunction
现在将始终绑定(bind)到特定上下文。
关于javascript - 上下文混合在 $.deferred.promise 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19830766/