写代码啦
JS 函数的执行时机
回复数(0) 浏览数(44)
{{topic.upvote_count || 0}} 编辑 回复
let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

上面的代码打印的结果是6个6
因为setTimeout中的代码会在主程序的代码执行完后才执行,当for循环执行完后,i的值为6,这时候再执行setTimeout中的代码会输出6个6

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

将let放到for循环中,就会输出0,1,2,3,4,5

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

或者是将setTimeout封装在一个函数内,for循环去调用这个函数的时候,将i作为参数传入到函数中,因为作用域的关系,当前i的值会被保存在函数中,所以在setTimeout内的代码输出时,就会输出当时调用函数时候的值

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

上面的代码打印的结果是6个6
因为setTimeout中的代码会在主程序的代码执行完后才执行,当for循环执行完后,i的值为6,这时候再执行setTimeout中的代码会输出6个6

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

将let放到for循环中,就会输出0,1,2,3,4,5

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

或者是将setTimeout封装在一个函数内,for循环去调用这个函数的时候,将i作为参数传入到函数中,因为作用域的关系,当前i的值会被保存在函数中,所以在setTimeout内的代码输出时,就会输出当时调用函数时候的值

44
回复 编辑