gpt4 book ai didi

javascript - 递归函数未定义错误

转载 作者:行者123 更新时间:2023-11-30 10:49:37 25 4
gpt4 key购买 nike

嗨,我有一个递归问题。

我遵循了 wc3 http://www.w3schools.com/jsref/met_win_settimeout.asp 中的这个例子但我的似乎根本不起作用。

function rotateImages(start)
{
var a = new Array("image1.jpg","image2.jpg","image3.jpg", "image4.jpg");
var c = new Array("url1", "url2", "url3", "url4");
var b = document.getElementById('rotating1');
var d = document.getElementById('imageurl');
if(start>=a.length)
start=0;
b.src = a[start];
d.href = c[start];
window.setTimeout("rotateImages(" + (start+1) + ")",3000);
}

rotateImages(0);

Firebug 抛出错误:

rotateImages is not defined
[Break On This Error] window.setTimeout('rotateImages('+(start+1)+')',3000);

但是,如果我将超时更改为:

window.setTimeout(rotateImages(start+1),3000);

它递归但不知何故延迟不起作用并且给了我太多递归(每秒 7000)

最佳答案

应该避免 eval 的原因有很多,它会破坏作用域就是其中之一。将字符串传递给 setTimeout 会导致它在计时器用完时被 evaled。

您应该传递一个函数。

window.setTimeout(rotateImages(start+1),3000);

这会立即调用 rotateImages,然后将其返回值传递给 setTimeout。这没有帮助,因为 rotateImages 不返回函数。

你可能想要:

window.setTimeout(rotateImages,3000,[start+1]);

或者创建一个匿名函数,将闭包包裹在 start 周围并传递它:

window.setTimeout(function () { rotateImages(start + 1); },3000);

后一种选择在浏览器中有更好的支持。

关于javascript - 递归函数未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283584/

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