setTimeout第三个参数应用
setTimeout函数有三个参数
- fn:(必传)需要执行的函数
- time:(非必传)
传值时:倒计时time毫秒后执行fn
不传时:默认为0,fn在最早可得的空闲时间执行,在"任务队列"的尾部执行fn,因此要等到同步任务和"任务队列"现有的事件都处理完,才会得到执行。 - param:(非必传)fn函数的参数
for(var i = 0; i<6; i++){
setTimeout(function(){
console.log(i);
},1000);
}
这是个闭包分析常用的一个例子,它会输出六个6
那如何让她输出1-6呢,
最常用的是使用闭包
for(var i=0; i<6; i++){
(function(j){
setTimeout(function(){
console.log(j);
},j*1000);
})(i);
}
或者是es6的let使作用域变为块级作用域
for(let i = 1; i <= 5; i++){
setTimeout(function timer(){
console.log(i)
},0)
}
那今天我们就用到了另一种方法,函数传参
for(var i=0;i<6;i++){
setTimeout(function(j){
console.log(j);
},i*1000,i);
}
setTimeout的第三个参数是给第一个函数的参数,是先执行的
例如,我们将一个函数作为第三个参数传入
var i=0;
setTimeout(function(){
console.log('函数'+i)
},3000,setTimeout(function(){
console.log('第三个参数'+i);
i++;
},1000));
输出:第三个参数0 函数1
可以看到第三个参数还可以是先执行,然后再执行函数。