我有一个函数(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不会奇怪地表现出来。 – Ryan
'switch'有一个case ='if'。最好使用正确的控制结构... –
感谢minitech,但它不是那么容易测试。 (或者,我完全可以用这个功能来做到这一点,但时机可能会欺骗我;-)) – Leo