普通函数的执行时机
函数在定义时不会执行,只要在调用函数时,其调用的变量已经存在就可以打印出变量值。
let a = 1;
function fn(){
console.log(a)
}
下面的代码,打印结果是6个6,为什么?
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
原因:setTimeout表示先放下内部的代码,暂时不执行,等其部分执行完毕后才执行,是延迟执行。外面i走到6了,循环结束,setTimeout才执行。
写出让上面代码打印 0、1、2、3、4、5 的方法
for和let一起使用时,js会在每次循环时,多创建一个i,可以达到新人思维的输出效果。
代码:
for(let i = 0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
还有一种办法,使用立即执行函数可以达到同样效果
let i = 0
for(i=0;i<6;i++){
!function(j){
setTimeout(()=>{
console.log(j)
},0)
}(i)
}