- 函数执行时机
- 打印6个6
- 打印 0,1,2,3,4,5
函数执行时机
- ①
let a = 1
function fn(){
console.log(a)
}
//不知道打印了什么,因为没有调用函数fn
- ②
let a = 1
function fn(){
console.log(a)
}
fn()
a = 2
//打印出1,因为先调用函数fn()后赋值a=2
- ③
let a = 1
function fn=(){
setTimeout(()=>{
console.log(a)
},0)
}
fn()
a=2
//打印出2,因为setTimeout()会让函数尽快打印出a的值,即执行完当前任务后尽快打印
打印6个6
先看已下代码:
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
chrome运行结果如下:
为什么是输出6个6呢?
-
setTimeout函数
MDN解释如下:
setTimeout() 方法设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。白话的理解: 会让函数尽快打印,即执行完当前任务后尽快执行。
如何输出0,1,2,3,4,5?
-
方案一: 在for循环体内声明
i。for(let i = 0; i<6; i++){ setTimeout(() => { console.log(i) }, 0) } -
方案二: 先声明函数,然后在
setTimeout()中调用。
let i = 0
function fn() {
console.log(i)
}
for(i = 0; i<6; i++){
setTimeout(fn(), 0)
}
- 方案三: 使用立即执行函数。
let i = 0
for(i = 0; i<6; i++){
(function(i){
setTimeout(() => {
console.log(i)
}, 0)
})(i)
}