/**
* 案例1
* let为块级作用域,在每一个{}中都是独立的,所以两个for不会相互影响,
* 先执行同步方法console,再执行异步队列setTimeout
*/
for(let i=0;i<3;i++){
console.log(i,'i')
setTimeout(()=>{
console.log(i)// 调用的是当前块级作用域的i
},2000)
}
// console.log(i,'i')//不存在
for(let i=0;i<5;i++){
console.log(i,'i2')
setTimeout(()=>{
console.log(i)
},1000)
}
//打印结果为(0,'i'),(1,'i')(2,'i')(0,'i2')(1,'i2')(2,'i2')(3,'i2')0 1 2 3 4 0 1 2
/**
* 案例2
* var为全局作用域,后面的会替换前面的,以后面定义的为准,所以两个for中的setTimeout中调用全都是window.i
* 先执行同步方法console,再执行异步队列setTimeout,此时全局i为5
*/
for(var i=0;i<3;i++){
// console.log(i,'i')
setTimeout(()=>{
console.log(i)//调用全都是window.i
},2000*i)
}
// console.log(i,'i') // i=3
// for(var i=0;i<5;i++){
// console.log(i,'i2')
// setTimeout(()=>{
// console.log(i)//调用全都是window.i
// },1000)
// }
//打印结果为(0,'i'),(1,'i')(2,'i')(0,'i2')(1,'i2')(2,'i2')(3,'i2')5个5,3个5