setTimeout的新发现

最近遇到个setTimeout回调函数做闭包出现的问题,解决这种问题时发现笔者给setTimeout加了第三个参数,瞬间觉得自己好像错过了什么。。。。。。

setTimeout  API文档链接https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

一直以来,以为setTimeout的用法应该是这样的:setTimeout(callback,delay);
    callback:回调函数。
    delay:执行代码前需等待的毫秒数。

今天我看到下面这段为解决闭包带来的子函数作用域访问的是父函数执行后的变量值 问题,如下代码,瞬间不明所以

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

console.log(new Date, i);


于是,API文档可以了解到,猜测第三个参数就是函数执行时的参数的值。

setTimeout(function(value){
  console.log(value);
},1000,'你会成功的,wtl!');

控制台输出,‘你会成功的,wtl!’;

总结:

setTimeout的完整形式应该是这样的:setTimeout(callback,delay,param1,param2,...);其中,callback,delay是必须的。其余参数依次是需要执行函数的参数。

原文地址:https://www.cnblogs.com/wangtianli/p/7016674.html