普通函数的执行时机
函数在定义时不会执行,只要在调用函数时,其调用的变量已经存在就可以打印出变量值。
let a = 1;function fn(){console.log(a)}
下面的代码,打印结果是6个6,为什么?
let i = 0for(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 = 0for(i=0;i<6;i++){!function(j){setTimeout(()=>{console.log(j)},0)}(i)}
