这就是我所拥有的:
var url = config_ajax.url;
xhr.addEventListener("progress", function(evt, url){
if (evt.lengthComputable) {
var percent = ( evt.loaded / evt.total ) * 100;
console.log(url);
Pub.ajaxIndicator(percent);
}
}, false);
我认为它看起来很糟糕,但JS不喜欢将config_ajax.url传递给函数和错误。
答案 0 :(得分:2)
实际上它创建了一个闭包并且可以访问,但我明确地传递它,但它是一个回调所以我认为不可能。
你是对的。回调是一个闭包,你不能明确传递给它。当你调用该函数时,您只能将值传递给函数。但是你没有调用回调,它被称为 你。您无法控制传递给它的URL。
我猜你可以使用.bind()
将第一个参数设置为特定值,如果你觉得更清洁:
function showProgress(url, evt) {
if (evt.lengthComputable) {
var percent = ( evt.loaded / evt.total ) * 100;
console.log(url);
Pub.ajaxIndicator(percent);
}
}
xhr.addEventListener("progress", showProgress.bind(null, config_ajax.url), false);
我建议您熟悉闭包,JavaScript中有一个通用且非常强大的工具。例如。没有理由创建url
,您也可以在回调中直接访问config_ajax
。