当在jQuery的延迟对象中使用回调函数时,特别是使用ajax调用时,该函数被赋予三个参数data
,responseText
和jqXHR
对象。我无法遵循提供这些参数的特定逻辑。它们如何被提供给方法中的匿名函数? data
定义在哪里?
示例:
这可以工作并记录数据:
deferredObj
.done(function(data){
console.log(data)
});
这不起作用,数据是一个未知变量:
defferedObj
.done(console.log(data));
答案 0 :(得分:1)
这不起作用,数据是未知变量
defferedObj.done(console.log(data));
当您使用console.log(data)
作为回调时,会在遇到该函数时立即调用该函数。
因此,在调用log
时,data
变量为undefined
。
这就像调用函数.done(myFun())
。
如果要将函数console.log
作为回调函数调用,并自动传递参数,可以将其称为
defferedObj
.done(console.log.bind(console));
它们如何被提供给方法内的匿名函数?数据定义在哪里?
你可以想到定义如下的异步函数:
function asyncDoSomething(param, callback) {
// Do something asynchronously here to get the data from somewhere
// Maybe DB/Network, etc.
// When processing is completed and data is retrieved
callback && callback(data);
}