setTimeout第三个参数

2019年08月15日Web前端

一直没发现setTimeout居然可以传三个以上的参数,原谅我菜了。。。特地上MDN看了下用法。

用法

setTimeout,用于延迟触发函数。

setTimeout(fn, delay);

fn表示触发函数,delay表示延迟多少毫秒。

等等,其他就不说了。。。

传参方式

从setTimeout第三个开始的参数会传递给function当作其参数。

setTimeout(function() {
    console.log(arguments); // Arguments(3) ["a", "b", "c", callee: ƒ, Symbol(Symbol.iterator): ƒ]
}, 0, 'a', 'b', 'c');

参数顺利传入。

注:IE10及以上支持。

其他用法

还记得这道题么,

for (var i = 0; i < 5; ++i) {
    setTimeout(function() {
        console.log(i);
    });
}

由于闭包照成了最后结果5个5,此时就可以使用setTimeout传参的方式来解决了:

for (var i = 0; i < 5; ++i) {
    setTimeout(function(i) {
        console.log(i);
    }, 0, i);
}

其他处理方式:1. let。2. IIEF。