当您以该形式将函数提供给 setTimeout 时,该函数将被执行,而不是传递给 setTimeout。您可以通过三种选择来使其发挥作用:
首先给出函数,然后给出超时和参数作为最后一个参数:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
或者只写一个将被评估的字符串:
setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);
第三种风格是传递一个调用该函数的匿名函数。请注意,在这种情况下,您必须在闭包中执行此操作,以防止循环中的值发生更改,因此它会变得有点棘手:
(function(u, p, t) {
setTimeout(function() { doRequest(u, p); }, t);
})(url, proxys[proxy], proxytimeout);
第二种格式有点 hacky,但如果参数是标量值(字符串、整数等),则仍然可以工作。第三种格式有点不清楚,因此在这种情况下,第一个选项显然最适合您。