经典面试题:6个6

138 阅读1分钟

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,5

for循环里setTimeOut  JS的异步机制和作用域的问题, 占个位等待填坑

新建作用域


普通代码:let b = a + 1

函数:let fn = ()=> a+1

let b = fn()

普通代码会立即求值,读取a的当前值

函数会等调用时再求值,即延时求值,且求值时才会读取a的最新值