//在块级作用域中使用var声明的变量,变量提升,默认为全局变量
for(var i=1;i<=3;i++ ){
console.log(i)
}
console.log(i)
for(let i=1;i<=3;i++ ){
setTimeout(function(){
console.log(i)
},1000)
}
//最终输出为4,是因为setTimeout为异步宏任务,需要等到同步任务执行完成之后
//之后执行,var声明为全局变量
for(var i=1;i<=3;i++ ){
setTimeout(function(){
console.log(i)
},1000)
}
//通过IIFE模拟块级作用域
//原理在于,通过传入外部参数保持对块级作用域中变量的引用
for(var j=1;j<=3;j++){
(function(a){
setTimeout(function(){
console.log(a+'---')
},2000)
})(j)
}