gpt4 book ai didi

javascript - 使用超时和传递变量循环函数

转载 作者:行者123 更新时间:2023-11-28 20:03:02 24 4
gpt4 key购买 nike

好吧,我感觉这很简单,但我忽略了一些东西。

我有一个数据数组,正在传递到包含 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);

关于javascript - 使用超时和传递变量循环函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com