d3 javascript中的变量范围

Posted

技术标签:

【中文标题】d3 javascript中的变量范围【英文标题】:variable scope in d3 javascript 【发布时间】:2013-06-22 01:47:39 【问题描述】:

我想通过以下代码获取全局变量中的数据:

var data;
d3.json ( "file.json" , function(json) 
  data = json;
  console.log(data); //defined
);
console.log(data); //undefined

但问题是我只是在 d3.json 函数中定义了数据变量,但它是未定义的。 我该如何解决这个问题?

谢谢

【问题讨论】:

【参考方案1】:

因为 d3 请求(如 d3.json)是异步的,最好将依赖于外部请求的所有代码封装在请求回调中,确保此代码在执行前能够访问数据。 From the D3 docs: "异步加载数据时,依赖于加载数据的代码一般应该存在于回调函数中。"

因此,一种选择是将所有代码放在回调函数中。如果您想将代码分成几部分,您还可以将请求中的响应传递给单独的函数,如下所示:

function myFunc(data) 
    console.log(data);


d3.json('file.json', function (data) 
    var json = data;
    myFunc(json);
);

【讨论】:

以上是关于d3 javascript中的变量范围的主要内容,如果未能解决你的问题,请参考以下文章

调用侦听器事件时,Javascript 数据不会持续存在

通过 Javascript 中的变量范围维护变量

JavaScript中的变量范围是什么?

Javascript,回调函数中的变量范围之外?

地理定位功能中的 JavaScript 变量范围

JavaScript中的“闭包”