普通函数的执行时机

函数在定义时不会执行,只要在调用函数时,其调用的变量已经存在就可以打印出变量值。

  1. let a = 1;
  2. function fn(){
  3. console.log(a)
  4. }

下面的代码,打印结果是6个6,为什么?

  1. let i = 0
  2. for(i = 0; i<6; i++){
  3. setTimeout(()=>{
  4. console.log(i)
  5. },0)
  6. }

原因:setTimeout表示先放下内部的代码,暂时不执行,等其部分执行完毕后才执行,是延迟执行。外面i走到6了,循环结束,setTimeout才执行。

写出让上面代码打印 0、1、2、3、4、5 的方法

for和let一起使用时,js会在每次循环时,多创建一个i,可以达到新人思维的输出效果。
代码:

  1. for(let i = 0;i<6;i++){
  2. setTimeout(()=>{
  3. console.log(i)
  4. },0)
  5. }

还有一种办法,使用立即执行函数可以达到同样效果

  1. let i = 0
  2. for(i=0;i<6;i++){
  3. !function(j){
  4. setTimeout(()=>{
  5. console.log(j)
  6. },0)
  7. }(i)
  8. }