var中常见的问题及解决方法

在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>

猜你喜欢

转载自blog.csdn.net/tozeroblog/article/details/81989865
今日推荐