js的调用时机

248 阅读1分钟

当你定义一个函数,如果没有调用的话,函数是不会执行的,只有当你调用这个函数的时候才会执行。但是,函数的调用时机不同,函数的返回值是不同的。

代码环境一

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
// 打印出了6个6

代码环境二

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

这两个代码的执行时机是不一样的。“setTimeout” 意为“过一会儿执行”。

在代码环境一情况下,在循环外面声明一个变量i,进入for循环,当=0时,判断i<6,过一会儿打印i(想象有一个人,给他一个任务,让他记着过一会儿打印i),i自增变为1,判断i<6,过一会儿打印i(同样想象有一个人,给他一个任务,让他记着过一会儿打印i),依次循环,当i=2、3、4、5时,都找一个人记着一会儿打印i。当i=6时,i=6,退出循环,这个时候,开始打印i,此时i=6,共循环了6次,所以会打印6个6。

在第二种代码环境下,我也解释不清楚,死记!

第三种打印出0、1、2、3、4、5的方法

1、简单的for循环,没必要用setTimeout,功能实现了,也不增加理解难度😂:

let arr = [0, 1, 2, 3, 4, 5]
for(let i = 0; i<arr.length; i++){
    console.log(arr[i])
}
// 打印出了0、1、2、3、4、5,

2、第三个参数来传参,

setTimeout ( code , ms ...) code:延迟时间到期之后执行的代码块 ms:延迟时间

for(var i=0;i<6;i++){
    setTimeout((i)=>console.log(i),0,i)
}