javascript - 上下文混合在 $.deferred.promise 中

标签 javascript jquery jquery-deferred deferred

我有以下代码;

function myFunction(promiseObject){
     var that = this;

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

上述函数在多个上下文中被调用,因此 this 的值在每次调用中都会发生变化。我面临的问题是,对于许多并发调用,that 的值被另一个正在完成的上下文覆盖。

我想了解这可能是什么原因。还想了解在 myFunction 中定义但在附加回调方法中使用的 that 变量范围背后的概念是什么。

提前致谢:)

-devsri

最佳答案

我希望我正确理解您的问题。在 myFunction 中定义并可在回调中访问的 that 变量背后的概念是词法作用域。它正在创建一个闭包(基本上是对定义回调的函数的执行环境的引用)以供回调访问。

myFunctionthis 的值将取决于您如何调用 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/

相关文章:

javascript - 网页的 jQuery 滚动功能无法正常工作?

javascript - 在 'for' 循环中使用 Jquery Promise() 等待效果完成后再开始下一个效果

javascript - 取消ajax请求: can the handler still be executed

javascript - 函数变量未传递给全局变量

javascript - 由于 JS 月间隔 0-11 导致的图表日期错误

javascript - 当我启用布局时,为什么 sails.js 会引发如此多的浏览器控制台错误?

javascript - 如何在 jQuery 中附加不带引号的字符串?

javascript - 在模糊事件中隐藏日期选择器

javascript - Jquery 延迟来自每个循环的 ajax 请求

javascript - Node.js 4.2.1 中的导出和导入