【发布时间】:2014-02-10 22:16:19
【问题描述】:
我有一个函数(zReaderRequest,见下文),其中回调函数正在使用第一个函数的本地变量,即此处的“rq”。对函数 zReaderRequest 的新调用会创建一个新变量“rq”还是回调函数会使用相同的“rq”?如果他们使用相同的,我该怎么办?创建一个包含此函数的对象,或者?
function zReaderRequest(zURL, outputElt, displayFun) {
switch (outputElt.dataset.zReaderStatus) {
case undefined:
outputElt.dataset.zReaderStatus = "requested";
var rq = new XMLHttpRequest();
rq.onload = function() {
if (displayFun(rq, outputElt))
outputElt.dataset.zReaderStatus = "received";
else
outputElt.dataset.zReaderStatus = "failed";
};
rq.open("GET", zURL, true);
rq.setRequestHeader("Zotero-API-Version", "2");
rq.send();
break;
}
}
我在哪里可以学到这一点,这样我就不必问这样的问题了? ;-)
【问题讨论】:
-
每次调用该函数时,它都会创建一个新函数。你怎么能避免问这种类型的问题?好吧,您可以尝试进行一个简短的实验来确认它是否按您的预期工作,或者只是相信 JavaScript 不会表现出太奇怪的行为。
-
switch一个案例 =if。最好使用正确的控制结构... -
感谢minitech,但测试起来并不容易。 (或者,我可以用这个函数来做,但时间可能会欺骗我。;-))
-
是的,但这种方式更具前瞻性,@T.J.Crowder... ;-)
标签: javascript callback scope