JS 不能使用在 for 循环中初始化的数组

Jam*_*lan 2 javascript

我无法理解 JS 中的作用域是如何工作的,我的背景是 R 和 Python。

这是一个玩具示例。games_array 最后总是打印为空。并且控制台中似乎不存在数组变量。

    for(var row_i = 0; row_i < 50; row_i++){

        var games_array = [];

        if(row_i % 2 == 0){

            console.log(data[row_i].name);
            games_array.push(data[row_i].name);
        }
    }
    console.log(games_array);
Run Code Online (Sandbox Code Playgroud)

但是这有效:

    var games_array = [];

    for(var row_i = 0; row_i < 50; row_i++){

        if(row_i % 2 == 0){

            console.log(data[row_i].name);
            games_array.push(data[row_i].name);
        }
    }
    console.log(games_array);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我不能创建一个空数组并在 for 循环中使用它。我需要将其包装在外循环中并在外循环中使用 games_array。

任何帮助表示赞赏。

Ele*_*dow 5

问题不在于范围界定。毕竟,由于您使用var而不是声明变量let,作用域扩展到 for 循环之外。问题是每次循环运行时,它都会设置games_array[],这意味着每次循环运行时数组都会被清除。

在第二个示例中,您只初始化数组一次,这就是它起作用的原因。