好吧我觉得这很简单,我忽视了一些事情。
我有一个数据数组,我正在传递给包含300行的函数。 函数本身挑选一个随机框进行更新,然后传递一个随机数组元素(0-299),然后更新该框。
第一次迭代很好。第二个返回“Uncaught ReferenceError:rand_ad is not defined”
function loop(last_ad, last_ad_box, ads_array){
// start
while(rand_ad == last_ad){
var rand_ad = get_rand(299);
}
while(rand_ad_box == last_ad_box){
var rand_ad_box = get_rand(29);
}
console.log(ads_array[rand_ad]);
// update the ad
// update_ad('.addno-'+rand_ad_box, ads_array[rand_ad]);
//recall itself to continue looping after 1 second
t = setTimeout("loop(rand_ad, rand_ad_box, ads_array)",3000);
}
function get_rand(max){
var rand = Math.floor(Math.random()*max) + 1;
return rand;
}
我认为它可能是函数循环周围的引号,它将内部变量视为字符串而不是实际变量,但我不能在它触发错误之前将其渲染出来。
有什么想法吗?
答案 0 :(得分:3)
你的猜测是正确的。将超时行更改为:
t = setTimeout(loop, 3000, rand_ad, rand_ad_box, ads_array);
将字符串传递给setTimeout是一种安全风险,不建议这样做。此外,它在超时发生之前不执行代码,因此在函数退出后将取消引用变量。
如果你需要它在IE中工作,那么你将不得不使用它:
t = setTimeout(function () {
loop(rand_ad, rand_ad_box, ads_array);
}, 3000);