较新的浏览器将允许您将参数传递给setTimeout
,并在回调中检索它。
setTimeout(function(a){
return callSomeAjax(a);
}, 1000, a);
或者你可以将它绑定到函数
setTimeout(function(a){
return callSomeAjax(a);
}.bind(null, a), 1000);
除此之外,您还需要创建setTimeout
使用该值在新范围中回调。
function callbackWithValue(a) {
return function() {
return callSomeAjax(a);
};
}
setTimeout(callbackWithValue(a), 1000);
或者,如果您已经拥有了该功能,并且没有其他需要传递的内容,那么您可以使其更加通用......
function callbackWithValue(fn) {
var args = [].slice.call(arguments, 1);
return function() {
return fn.apply(null, args);
};
}
setTimeout(callbackWithValue(callSomeAjax, a), 1000);
最后一个展示了一个.bind()
功能。它可以进一步扩展以允许绑定this
以及在绑定参数之后传递的附加参数的串联。