【问题标题】:local vs global variable in JavascriptJavascript中的局部变量与全局变量
【发布时间】:2014-04-20 22:41:50
【问题描述】:

我在 Javascript 中有这段代码:

var words = [];

d3.json("myFile.json", function(data) {
    words = data.words;
    console.log(words);  //Log output to console
});

console.log(words);  //Log output to console

第一个console.log(words); 显示了一个包含七个对象的数组。 但第二个console.log(words); 显示一个空数组。所以看起来 d3.json 函数外的 words 与该函数内的 words 不同。

我也尝试在函数之外使用console.log(window.words);,但它仍然显示一个空数组。

如何在 d3.json 函数中获取我从 myFile.json 读取的数据,在该函数之外?

【问题讨论】:

    标签: javascript function d3.js global-variables


    【解决方案1】:

    d3.json 是一个异步函数。这意味着您传递的代码不会立即执行,而是在 JSON 文件请求返回后作为 回调 执行。也就是说,为文件发送了网络请求,但正常的执行流程仍在继续。

    d3.json 之外的 console.log(words); 只是在调用返回并填充数组之前执行。

    【讨论】:

    • 感谢您的回答。有没有办法可以等到数组填充后再使用它?
    • 我试图通过在此之前添加:var aa; for (var i = 0; i < 100000; i++) { aa= 10 + Math.random() * 90; } 来延迟第二个 console.log(words);,但它没有帮助!
    • 您可以使用queue,将您的代码移动到d3.json 调用或调用一个函数并从d3.json 函数内部传递words。除了 Lars cmets this question 可能也有帮助。
    • @user1614080 感谢您的评论,我做到了,并且成功了,也就是说,我将代码移到了 d3.json 函数中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多