//在块级作用域中使用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) }