【发布时间】:2010-05-24 22:44:13
【问题描述】:
我正在使用 XMLHttpRequest,我想在成功回调函数中访问一个局部变量。
代码如下:
function getFileContents(filePath, callbackFn) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
callbackFn(xhr.responseText);
}
}
xhr.open("GET", chrome.extension.getURL(filePath), true);
xhr.send();
}
我想这样称呼它:
var test = "lol";
getFileContents("hello.js", function(data) {
alert(test);
});
这里,test 将超出回调函数的范围,因为在回调函数内只能访问封闭函数的变量。将test 传递给回调函数以便alert(test); 正确显示test 的最佳方法是什么?
编辑:
现在,如果我有以下代码调用上面定义的函数:
for (var test in testers) {
getFileContents("hello.js", function(data) {
alert(test);
});
}
alert(test); 代码仅打印来自for 循环的test 的最后一个值。如何使它在调用函数getFileContents 期间打印test 的值? (我想在不更改getFileContents 的情况下执行此操作,因为它是一个非常通用的辅助函数,我不想通过将test 之类的特定变量传递给它来使其具体化。
【问题讨论】:
-
解决编辑问题,在 ES6 中你可以使用
let而不是var巧妙地解决闭包问题。 Demonstrated here
标签: javascript function callback scope