4 回答
TA贡献1810条经验 获得超4个赞
你这个是把show()
的返回值当setTimeout
的第一个参数执行setTimeout(show,1000*i,i);
第三个和之后的都是第一个参数的参数
TA贡献1775条经验 获得超8个赞
setTimeout(show(i),1000*i);
setTimeout语句执行前,show(i)已经被执行
setTimeout函数要求第一个参数为一个函数
正确的代码:
var cards = document.getElementsByClassName('card');
for(let i=0;i<cards.length;i++){
setTimeout((function(i){
return function(){
show(i);
}
}(i)),1000*i);
}
//动画
function show(i){
console.log(new Date());
}
TA贡献1796条经验 获得超4个赞
楼上正解,show(i)在setTimeout语句执行前已经被执行了,它已经是一个结果了,所以setTimeout(show(i),1000i);即为setTimeout(一个结果,1000i);
自然是没有解的,而打印出来的值其实是show(i)执行的结果,所以自然没有延时效果
TA贡献1786条经验 获得超11个赞
settimeout(show(),i) 你这表示是执行函数.是函数自己执行.而不是定时器去调用
settimeout(show,i) 这是调用函数. 和传参不传参一点关系没有.
settimeout(function(){
show();
})
这是创建个函数去调用.新创建的函数被定时器调用.所有也会有延迟.
这就是一个函数调用的问题.仔细思考就明白了
添加回答
举报