我有以下代码;
function myFunction(promiseObject){
var that = this;
promiseObject
.done(function(){
//using that here
});
}
上述函数在多个上下文中被调用,因此每个调用中this
的值都会发生变化。我面临的问题是,对于许多并发调用,that
的值会被另一个也在完成的上下文覆盖。
我想了解这可能是什么原因。还想了解that
中定义的myFunction
变量范围背后的概念是什么,但在附加的回调方法中使用。
提前致谢:)
-devsri
答案 0 :(得分:4)
我希望我能正确理解你的问题。在that
中定义并且在回调中可访问的myFunction
变量背后的概念是工作中的词法范围。它正在创建一个闭包(基本上是对定义回调的函数的执行环境的引用),用于访问回调。
this
内myFunction
的价值将取决于您调用myFunction
的方式。
如果您希望myFunction
拥有特定的上下文,则需要使用该上下文调用它,如下所示:
var myContext = { foo: "bar" };
myFunction.call(myContext);
myFunction内this
的值现在等于myContext
。
如果您希望that
的值在呼叫之间保持一致,则需要确保在任何地方使用正确的上下文呼叫/应用myFunction
。
或者你可以使用像underscore.js的_.bind
:
myFunction = _.bind(myFunction, myContext);
myFunction
现在将始终绑定到特定的上下文。