需求:因项目需求,需要用到定时器setTimeout来掩饰处理某个逻辑,但我发现setTimeout却立即执行了
下面主要梳理一下setTimeout的用法:
简单例子:
setTimeout("alert('对不起, 要你久候')", 3000);
3秒后会显示一个弹窗。
咱们经常会用setTimeout执行一个函数,我之前的调用方法
setTimeout(this.clearData(), 3000);
但是这样写,会立刻调用clearData()方法,并没有延迟效果。
原因在于:setTimeout
的第一个参数必须是字符或者是函数体,不能是可执行的方法,若是可执行的方法,这里会立即执行,没有延迟效果。
所以要实现延迟效果,上面的代码可以改为:
var _this = this;
setTimeout(function() {
_this.clearData();
}, 5000);
这里注意:setTimeout中不能用this调用外部函数,setTimeout下this指windows
解决方法:外部将this赋值给一个变量,例如: var _this = this;
更简单的一种情况可以使用箭头函数
setTimeout(() => {
this.clearData();
}, 5000);
因为箭头函数中this指向的是箭头函数声明时作用域的this。