函数的执行时机
以下结果会打印6个6,而不是0,1,2,3,4,5
原因:在这段代码中,先执行完for循环,在执行setTimeout()里面的代码,setTimeout()是等当前的事执行完之后才执行,执行完for循环时,i已经变成6了,所以就依次打印6个6。
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{ //setTimeout过设定时间才执行
console.log(i)
},0)
}
结果打印6个6
让上面代码打印 0、1、2、3、4、5 的方法
for(let i = 0; i<6; i++){
setTimeout(()=>{ //setTimeout过设定时间才执行
console.log(i)
},0)
}
其他的方法打印 0、1、2、3、4、5
function num(){
var i = 0
var t = setInterval(function(){
console.log(i)
i++
if(i>5){
clearInterval(t)
}
},0)
}
num()
JS 函数的调用时机
调用时机不同,结果就不同。举一下几个例子来看:
let a = 1
function fn(){
console.log(a)
}
结果不知道打印啥,因为没有调用
let a = 1
function fn(){
console.log(a)
}
fn()
结果打印1
let a = 1
function fn(){
console.log(a)
}
a = 2
fn()
结果打印2
let a = 1
function fn(){
console.log(a)
}
fn()
a = 2
结果打印1
let a = 1
function fn(){
setTimeout(() => {
console.log(a)
},0)
}
fn()
a = 2
结果打印2