前言
JS函数在执行时候,由于函数所处的外置不同,所以会导致产生的结果也不同,下面通过案例来分析一下
案例
代码如下
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
如果大家对上面的代码足够理解,我相信一眼就能看出它的输出结果为:6个6。那为什么结果是6个6而不是0,1,2,3,4,5,呢,下面我们就来分析一波。
这个代码的关键点是setTimeout,它就相当于一个定时器,意思等待一段时间在执行。这个等待的时间就是把里面的for循环执行完后才会打印出i,当i=6的时候是循环结束的时候,所以打印的结果是6。那为什么是6个6呢,因为for循环里从i=0时到i不满足条件时一共执行了6次。所以当等待的时间结束后会打印出6个6.
那怎么才能打印出大家的期望值0,1,2,3,4,5,呢。那么请往下看
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
运行以上代码会发现它打印的结果为:0,1,2,3,4,5
因为这里let声明的i是局部变量,在每次执行循环体前会把i重新声明初始化
除了上面的代码,可以实现打印出0,1,2,3,4,5之外,当然还有其它方法,代码如下
for(i = 0; i<6; i++){
let m=i
setTimeout(()=>{
console.log(m)
},0)
}