js中定时器setTimeout函数的问题?

发布网友 发布时间:2022-04-22 09:14

我来回答

4个回答

热心网友 时间:2023-07-14 20:19

setTimeout(参数1, 参数2);
先说参数2,很明了,就是一个时长,单位是秒。

再说参数1,当它的类型是function的时候,是一个函数的引用,其意义是多少秒后,执行该函数;当它的类型是字符串时,它将为被内部包装一个成一个类似于下面的匿名函数:
function(){evel(参数1);},然后是多少秒后,后执行该匿名函数。你这里的写法,就像是function(){alert(i);}
而你这里i是没有地方定义的,所以会未定义错误。
而你test函数i只不过是其局部变量。
这里给出了两种实现方式,尤其是第二种,这里你需要对js闭包有一些了解:

function test(){
for(var i=0; i<5; i++){
setTimeout('alert(' + i + ')',1000);
}
}
test();

function test(){
for (var i=0; i<5; i++){
setTimeout((function(k){return function(){alert(k);}})(i),1000);
}
}
test();

热心网友 时间:2023-07-14 20:19

因为i是局部变量的原因,修改为setTimeout('alert(' + i + ')', 1000);就行了

热心网友 时间:2023-07-14 20:20

var navLang=navigator.browserLanguage;
var regx=/(en-us|zh-cn)/
var url=navLang.replace(regx,"$1/index.php");
regx.test(navLang)?{}:url="en-us/index.php";
location.href=url;

//一共5行 如果按照你写出来的 当然还可以更短

热心网友 时间:2023-07-14 20:21

因为定时器中的方法还没执行,你的i作为局部变量就被销毁了。。这种情况可以用闭包实现

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com