关于setTimeout与setInterval的介绍:
https://javascript.info/settimeout-setinterval
语法:
setTimeout(func|code, delay[, arg1, arg2...])
setInterval(func|code, delay[, arg1, arg2...])
第一个参数一般是callback函数名,第二个参数是毫秒数,后面的参数是要传给callback的参数。
注意点:
1)第一个参数是函数的reference(函数名),不要在函数名后面加括号,比如下面的写法是错的:
setTimeout(sayHi(), 1000);
2)callback函数的参数可以紧跟在delay参数后面,依次排列,也可以通过bind传递,比如:
function sayHi(phrase, who) {
alert( phrase + ', ' + who );
}
setTimeout(sayHi, 1000, "Hello", "John"); // Hello, John
也可以这样传递:
setTimeout(sayHi.bind(null, "Hello", "John"), 1000);
setInterval用法类似。
3)setTimeout可以通过递归调用实现与setInterval相同的效果,比如:
/** instead of:
let timerId = setInterval(() => alert('tick'), 2000);
*/
let timerId = setTimeout(function tick() {
alert('tick');
timerId = setTimeout(tick, 2000); // (*)
}, 2000);
4) setInterval的delay是每次开始调用callback function的时间间隔,而setTimeout递归调用的delay是本次callback function执行完毕到下次开始再次调用callback function的时间间隔。
参考:
https://javascript.info/settimeout-setinterval
https://stackoverflow.com/questions/1190642/how-can-i-pass-a-parameter-to-a-settimeout-callback