变量在运行时未定义,但在使用调试器时定义

Variable is undefined in runtime, but gets defined when using debugger

本文关键字:调试器 定义 运行时 未定义 变量      更新时间:2023-09-26

我是一个javascript新手,正在javascript中尝试此代码(使用jQuery):

$(document).ready(function() {
var nodes=[];
$.getJSON('/get/data', function(data) {
            nodes.push(data);
        });
//debugger
console.log(nodes);
console.log(nodes[0]);
});

这就是我在控制台中看到的:

[ ]
undefined

但当我取消注释//调试器并运行它时,我会得到以下结果:

  []
  []
  []
 [[Object { id=10,  label="foo"}, Object { id=9,  label="bar"}, 43 more...]]
 [Object { id=10,  label="foo"}, Object { id=9,  label="bar"}, ...]

发生了什么事?我不明白激活调试器是如何影响变量并使其定义或未定义的。顺便说一句,这只是一个更大脚本的一部分,所以它可能是一个因素。

这是一个异步函数,因此在运行回调之后才会填充nodes。试试这个:

var nodes=[];
 //this "function(data)" is a callback to be executed when you get your data back
 $.getJSON('/get/data', function(data) {
     nodes.push(data);
     console.log(nodes); //<--this now has data!
     console.log(nodes[0]);
});