好吧,我觉得这很简单,我正在忽略某些东西。
我要传递给包含300行的函数的数据数组。该函数本身会选择一个要更新的随机框,然后选择一个要传递的随机数组元素(0-299),然后更新该框。
第一个迭代很好。第二个返回“ Uncaught ReferenceError:未定义rand_ad”
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;
}
我认为这可能是函数循环周围的引号,它会将内部变量视为字符串而不是实际变量,但是我无法在它抓住错误之前将其呈现出来。
有任何想法吗?
你的猜测是正确的。将超时行更改为此:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句