JavaScri pt(第五节)

201 阅读1分钟

JS 函数的执行时机

说到JS函数的时机,我就有必要说一下这个setTimeout。

1.例:这个题的答案是多少?

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

正确答案:6个6

解析

  1. setTimeout有等会再执行的意思。(如:你正在打吃鸡游戏,你妈突然叫你吃饭了。这时,你肯定是答:马上来。但是实际情况就是你把游戏打完才去吃的饭;setTimeout也是这样)
  2. 这个题首先他是一个for循环,当他已经开始循环了,我们再叫打印出i。所以,他要等for循环执行完后再打印;但是当for循环执行完后,其实他对应的值就是6;这个时候再去打印6次,肯定就是6个6。

2. 例:求出这个题的答案?

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

答案:0,1,2,3,4,5

解析:

  1. 当for和let一起引用的时候,会把i复制一份。所这个例子种,每当for循环一次,都会复制一个i并打出来。

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5

1. let person ={
    name:'justin'
    f(){
        console.log(this.name)
    }
    
}
person.f.call({name:'0'})
person.f.call({name:'1'})
person.f.call({name:'2'})
person.f.call({name:'3'})
person.f.call({name:'4'})
person.f.call({name:'5'})


2. function fn(x){
    if(x<6){
        return x
    }
}
fn(1)
fn(2)
fn(3)
fn(4)
fn(5)