在es5中通过var声明的变量会通过变量提升机制被提升,很多时候都会在笔试中遇到以下类似的问题,记下来,方便自己忘记时查看
<script>
var funcs=[];
for(var i=0;i<10;i++){
funcs.push(function(){
console.log(i);
})
funcs.forEach(function(func){
func();
})
</script>
原本是想输出0到9的数字,但是这样子通过for循环得到的永远都是10
那么如果还是想要输出0到9的数字,有没有办法呢?有!通过立即执行函数,如下(来自《深入理解es6》书籍)
<script>
var funcs=[];
for(var i=0;i<10;i++){
funcs.push(function(value){
return function(){
console.log(value);
}
}(i))
}
funcs.forEach(function(func){
func();
})
</script>
这样就可以了
那么有没有更方便的方法?
有,就是通过es6新增的let
<script>
var funcs=[];
for(let i=0;i<10;i++){
funcs.push(function(){
console.log(i);
})
}
funcs.forEach(function(func){
func()
})
</script>