JavaScript控制台在分配变量之前打印指定的变量值?

Ric*_*ard 10 javascript

我对JavaScript或Chrome控制台的行为感到非常困惑.有人可以帮我理解吗?

基本上我有以下JavaScript代码,而不是嵌套在任何函数或其他范围内:

var initial_array = [];

function initialiseArray() { 
   initial_array = [2, 9, 8, 6, 0, 2, 1];
} 

function copyToNewArray() {
    var copied_array = [];

    console.log("COPIED 1", copied_array);

    for (var i = 0; i < initial_array.length; i++) {
        var copy = initial_array[i];
        copied_array.push(copy);
    }

    console.log("COPIED 2", copied_array);
}

initialiseArray();
copyToNewArray();
Run Code Online (Sandbox Code Playgroud)

我希望COPIED 1打印[]- 因为变量尚未分配 - 而是打印[2, 9, 8, 6, 0, 2, 1]- 即分配后的值.

为什么?

顺便说一句,如果用8-11替换第8行initial_array = copied_array,那么RESULTS 1确实打印为[].这与使用有关.push吗?

BeR*_*ive 8

尝试在Chrome脚本调试程序中调试您的问题.在线上放一个断点:

for (var i = 0; i < initial_array.length; i++) {
Run Code Online (Sandbox Code Playgroud)

你会看到你想要的行为.

您遇到的问题是您正在做出错误的假设,即Chrome调试器会立即"打印"该值,而实际上它是console.log异步执行的.由于数组在实际去打印值时在后端通过引用传递,因此它现在是您正在看到的值.