setTimeout
和setInterval
这两个方法我们平时会经常用到,有的时候我们需要在过多久后执行已经定义好的某个方法。
如下已经定义好某个方法:
function someFn(prop) {
console.log(`使用prop参数:${prop}`)
}
设置隔五秒的时候执行:
setTimeout(someFn, 5000)
如果按照以上来调用,我们就没法获取到prop参数,以前我的做法是在匿名函数里面调用someFn
:
setTimeout(function(){
someFn('hello world!')
}, 5000)
但是这样做的话,平白多定义了一个匿名函数,并且代码看起来也不简洁,恰好今天在学习Promise
的时候,发现setTimeout
和setInterval
方法其实不止包含这两个参数,还有另外一个参数一直没被我用到过,先给文档链接。
以下是文档上的语法解释:
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);
function
function
是你想要在delay毫秒之后执行的函数。code
这是一个替代语法,你可以使用字符串代替function
,在delay
毫秒之后执行字符串 (使用该语法是不推荐的, 原因和使用eval()
一样,有安全风险)。delay(可选)
延迟的毫秒数 (一秒等于1000毫秒),函数的调用会在该延迟之后发生。如果省略该参数,delay取默认值0。param1, …, paramN (可选)
附加参数,一旦定时器到期,它们会作为参数传递给function 或 执行字符串(setTimeout参数中的code)
所以现在我们可以直接通过如下方式传递参数
setTimeout(someFn, 5000 , 'hello world')
setInterval
的使用方法和setTimeout
一样
注意:
IE9 及更早的 IE 浏览器不支持第一种语法中向延迟函数传递额外参数的功能。如需要实现pollyfill
,可以参考上面给的文档链接