代码之家  ›  专栏  ›  技术社区  ›  jwkoo

javascript闭包-数组,无法理解结果(简单ex)[重复]

  •  0
  • jwkoo  · 技术社区  · 9 年前
        var arr = []
        for(var i=0; i<5; i++){
            arr[i] = function(){
                return i;
            }
        }
        for(var index in arr){
            document.write(arr[index]())};
    

        var arr = []                   // creating array new object
        for(var i=0; i<5; i++){            
            arr[i] = function(){
                return i;
            }             
        // arr = [function(){return 0}, function(){return 1}, function(){return 2}, function(){return 3}, function(){return 4}
        }
        for(var index in arr){
            document.write(arr[index]())};
    
        // outcome is 12345
    

    我已经读过这篇文章了 JavaScript closure inside loops – simple practical example ,

    2 回复  |  直到 9 年前
        1
  •  1
  •   Rax Weber    9 年前

    那是因为在你的 for循环 var i 不是块范围。意思是,你可以访问 i 在环路之外。因此,在您创建了循环内的函数之后 ,并在外部执行这些功能 i = 5 ,因为这是您最后分配给的值 .您需要使用 let var 要在循环中使用块范围的变量。

        2
  •  1
  •   Jaromanda X    9 年前

    顺便说一下,我希望输出为01234

    var arr = []
    for(let i=0; i<5; i++){
        arr[i] = function(){
            return i;
        }
    }
    for(var index in arr){
        console.log(arr[index]())
    }

    但这并没有帮助互联网爆炸-所以,通过transplier运行这个( babel

    "use strict";
    
    var arr = [];
    
    var _loop = function _loop(i) {
        arr[i] = function () {
            return i;
        };
    };
    
    for (var i = 0; i < 5; i++) {
        _loop(i);
    }
    
    for(var index in arr){
        console.log(arr[index]())
    }