for(var i = 0;i<6;i++){
setTimeout(()=>{console.log(i)})
}
//打出6个6//使用let
for(var i = 0;i<6;i++){
let j = i //这里不能用var,var和let区别
setTimeout(()=>{
console.log(j)
})
}
//打出0,1,2,3,4,5
进阶:
for(let i = 0;i<6;i++){
setTimeout(()=>{
console.log(i)
})
}
//打出0,1,2,3,4,5
//注意:用let声明i不能在for循环的外面,如:
let i
for(i = 0;i<6;i++){
setTimeout(()=>{
console.log(i)
})
}
//打出6个6//用立即执行函数
for(var i = 0;i<6;i++){
!function(j){
setTimeout(()=>{console.log(j)})
}(i)
}
//打出0,1,2,3,4,5for循环里setTimeOut JS的异步机制和作用域的问题, 占个位等待填坑
新建作用域
普通代码:let b = a + 1
函数:let fn = ()=> a+1
let b = fn()
普通代码会立即求值,读取a的当前值
函数会等调用时再求值,即延时求值,且求值时才会读取a的最新值