Javascript 为什么';t$.when.按预期申请工作

Javascript 为什么';t$.when.按预期申请工作,javascript,jquery,Javascript,Jquery,假设我有一个$.post函数数组 var pa = [$.post(url0), $.post(url1),......]; $.when(pa[0],pa[1],...]) // works as expected 但是 你应使用: $.when.apply($, pa); apply的第一个参数是调用函数的上下文(即此在函数上下文中的含义)。第二个参数是包含函数参数的数组。您忘记了第一个参数to,即函数的thisArg。由于不关心其this的值,因此可以传递任何内容: $.when.a

假设我有一个$.post函数数组

var pa = [$.post(url0), $.post(url1),......];

$.when(pa[0],pa[1],...]) // works as expected
但是

你应使用:

$.when.apply($, pa);

apply
的第一个参数是调用函数的上下文(即
在函数上下文中的含义)。第二个参数是包含函数参数的数组。

您忘记了第一个参数to,即函数的thisArg。由于不关心其
this
的值,因此可以传递任何内容:

$.when.apply(null, pa);
$.when.apply($, pa);

Function.prototype.apply
需要上下文作为第一个参数(在被调用的函数中用作
的引用的对象)

所以你可以这样称呼它

$.when.apply( null, pa );
每次我都喜欢用一些“诡计”来避免这种情况。我们可以像这样调用
函数.prototype.bind

var when = Function.prototype.apply.bind( jQuery.when, null );
现在,我们确实可以打电话了

when( pa ).done( /* ... */ ) { }
when( pa ).done( /* ... */ ) { }