📅  最后修改于: 2023-12-03 15:34:57.401000             🧑  作者: Mango
在Javascript中,setTimeout函数是一个非常常用的函数,它可以实现一定时间后执行一个函数。
setTimeout语法如下:
setTimeout(function, milliseconds, arg1, arg2, ...)
function
:必选,要执行的函数或要执行的代码字符串。milliseconds
:必选,延迟的时间,单位是毫秒。arg1
, arg2
, ...:可选,要传递给函数的参数。以下是一个使用setTimeout函数的示例:
for (var i = 1; i <= 5; i++) {
setTimeout(() => { console.log(i); }, 100);
}
在上面的代码中,我们使用了一个for循环,循环五次,每次调用setTimeout函数,延迟100毫秒输出i的值。但是,我们发现输出的结果并不是我们期望的1,2,3,4,5,而是5,5,5,5,5。这是为什么呢?
这是因为Javascript的事件循环机制,setTimeout函数是异步的,其会先把所有循环结束后的结果存起来,等待延时结束后再依次输出。因此,我们需要利用闭包使每次调用的时候能够输出对应的值。
修改后的代码如下:
for (var i = 1; i <= 5; i++) {
(function(j) {
setTimeout(() => { console.log(j); }, 100);
})(i);
}
在上面的代码中,我们使用了一个匿名函数,并立即执行了它,将i的值传递进去,从而每次调用时能够输出对应的值。
setTimeout函数是Javascript中一个非常有用的函数,但是在使用时需要注意其异步特性,避免不必要的错误。