您可以使用一种称为currying的技术将附加参数传递给您的回调函数。基本上,您编写一个匿名函数,该函数使用静态参数调用您的函数并将其用作回调函数。对于您的示例,这应该有效:
function uploadComplete (evt, attr) {
console.log( attr );
console.log( evt.target.responseText );
}
var extra = "I want to be sent as an attribute";
var xhr = new XMLHttpRequest();
xhr.addEventListener( "load", function (evt)
uploadComplete( evt, extra );
}, false );
匿名函数由事件系统调用,并调用您的uploadComplete
函数,传递它作为参数接收的事件对象和通过闭包extra
访问的 的值。如果变量在定义回调函数时在范围内,则不需要将其作为参数传递;您可以通过回调的闭包访问它。extra
var extra = "I want to be sent as an attribute";
function uploadComplete (evt) {
console.log( extra );
console.log( evt.target.responseText );
}
var xhr = new XMLHttpRequest();
xhr.addEventListener( "load", uploadComplete, false );
另请注意,当您传递要用作回调的函数时,您只需使用不带括号的函数名称。如果您使用括号,您将自己调用该函数并将其返回值作为回调传递。