hand
_1_11_153
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 20:10:39
在 JavaScript 中,setTimeout
是一个非常实用的函数,它允许我们在指定的时间后执行特定的任务。这在很多场景下都非常有用,比如动画效果的延迟触发、定时提醒等。本文将深入探讨 setTimeout
的使用方法、原理以及一些需要注意的地方。
setTimeout
函数的基本语法如下:
let timeoutId = setTimeout(callback, delay, arg1, arg2,...);
callback
:这是一个回调函数,当指定的时间到达后,这个函数将被执行。delay
:表示延迟的时间,单位是毫秒(ms)。例如,1000
表示延迟 1 秒。arg1, arg2,...
(可选):这些是传递给回调函数的参数。setTimeout
函数会返回一个唯一的标识符 timeoutId
,我们可以使用这个标识符来取消定时器。
下面是一个简单的 setTimeout
示例,它将在 2 秒后弹出一个提示框:
setTimeout(function() {
alert('2 秒时间到!');
}, 2000);
在这个例子中,我们定义了一个匿名函数作为回调函数,当 2000 毫秒(即 2 秒)过去后,这个匿名函数将被执行,弹出一个提示框显示“2 秒时间到!”。
如果需要给回调函数传递参数,可以在 delay
后面依次列出这些参数。例如:
function greet(name) {
console.log(`你好,${name}!`);
}
setTimeout(greet, 1500, '张三');
在这个例子中,我们定义了一个 greet
函数,它接受一个参数 name
。通过 setTimeout
函数,我们在 1.5 秒后调用 greet
函数,并将 ‘张三’ 作为参数传递给它。
有时候,我们可能需要在定时器触发之前取消它。这时候就可以使用 clearTimeout
函数,它接受 setTimeout
返回的 timeoutId
作为参数。例如:
let timerId = setTimeout(function() {
console.log('这个定时器将不会触发');
}, 3000);
// 取消定时器
clearTimeout(timerId);
在这个例子中,我们先使用 setTimeout
设置了一个 3 秒后执行的定时器,并将返回的 timeoutId
存储在 timerId
变量中。然后,我们调用 clearTimeout
函数,传入 timerId
,这样定时器就被取消了,回调函数不会被执行。
虽然 setTimeout
的 delay
参数指定了延迟的时间,但实际上,由于 JavaScript 是单线程的,它可能无法精确地在指定的时间执行回调函数。如果当前线程中有其他耗时的任务,回调函数的执行时间可能会被推迟。
在使用匿名函数作为回调函数时,要注意函数内部的 this
指向问题。在严格模式下,this
会指向 undefined
;在非严格模式下,this
会指向全局对象(在浏览器中是 window
对象)。例如:
let obj = {
name: '示例对象',
showName: function() {
setTimeout(function() {
console.log(this.name); // 这里的 this 指向全局对象
}, 1000);
}
};
obj.showName();
为了解决这个问题,可以使用箭头函数或者保存 this
的引用。例如:
let obj = {
name: '示例对象',
showName: function() {
let self = this;
setTimeout(function() {
console.log(self.name); // 使用保存的 this 引用
}, 1000);
}
};
obj.showName();
函数 | 作用 | 示例 |
---|---|---|
setTimeout(callback, delay, arg1, arg2,...) |
设置一个定时器,在指定的延迟时间后执行回调函数 | setTimeout(() => console.log('延迟执行'), 2000); |
clearTimeout(timeoutId) |
取消由 setTimeout 设置的定时器 |
let id = setTimeout(() => {}, 3000); clearTimeout(id); |
通过 setTimeout
函数,我们可以方便地实现延迟执行任务的功能。在使用过程中,要注意延迟时间的精度和 this
指向等问题,以确保代码的正确性和稳定性。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~