let i = 0
for(i = 0;i<6;i++){
setTimeouy(()=>{
console.log(i)
},0)
}
以上函数会打印出6个6,用let声明的i,在全局作用域里,setTimeout里的内容是异步代码,不论设了定时是多少,都会在当前同步代码执行完之后执行。
for(let i = 0;i<6;i++){
setTimeouy(()=>{
console.log(i)
},0)
}
以上代码会打印出:0,1,2,3,4,5。这里let声明的i,是在局部作用域里。
除了使用for let配合,以下方法也可以打印出0,1,2,3,4,5
①闭包
let i
for(i = 0; i<6; i++){
!function(j){
setTimeout(()=>{
console.log(j)
},0)
}(i)
}
②利用 setTimeout 的第三个参数,将i传进去
let i
for(i = 0; i<6; i++){
setTimeout((value)=>{
console.log(value)
},0,i)
}
③利用 const 关键字
let i
for(i = 0; i<6; i++){
const x = i
setTimeout(()=>{
console.log(x)
})
}