我有一个内容为data.json的文件{"id": "foo", "value": "bar"}。我在同一目录中有另一个文件index.html,具有以下内容:

<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
  var datavar;
  d3.json("data.json", function(d) { datavar = d; console.log(datavar); });
  console.log(datavar);
</script>


当我在Web浏览器中打开index.html时,第一个console.log(datavar)调用将输出{id: "foo", value: "bar"}。第二个输出undefined。我的印象是,由于我在函数外部初始化了datavar,因此一旦我们退出该函数,所做的更改将持续。我该如何在功能外的功能内存储数据?

最佳答案

您的假设是正确的,即在全局级别定义的变量然后在函数中进行更改将使更改保持在所述函数之外。

但是,由于它是异步操作,因此输出为“ undefined”。这意味着更改“ datavar”的代码在登录之前可能尚未执行。如果在控制台日志中添加注释,即console.log('inside d3', datavar)console.log('outside d3', datavar),您可能会惊讶地发现'outside d3'首先执行。

绝对是您想要的异步加载-因此,您应该相应地调整实际代码。如果遇到问题,请随时提供更多详细信息。

如果您绝对需要同步加载数据,请参见以下SO答案:
How do I load JSON data synchronously with d3.js?

关于javascript - 功能中的javascript存储设置变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34912018/

10-10 03:34