考虑以下代码
var height = 500, width = 700;
var root;
var tree = d3.layout.tree()
.size([height, width]);
d3.json("abc.json", function(error, flare) {
root = flare;
alert(root); // This prints object object
});
alert(root); // This prints undefined
d3.json中的警报正确显示它是一个对象,但d3.json外的警报打印未定义。如何在d3.json外部访问root?我需要它,因为根据页面中的一些用户输入,我可能需要在d3树中进行一些操作,例如,删除一些节点。这些用户输入位于与d3树分开的某些控件上。
谢谢。
答案 0 :(得分:1)
这是因为d3.json
异步运行。
这个例子让我们更清楚:
root = 'initial value';
d3.json("abc.json", function(error, flare) {
// This runs after `abc.json` has been fetched
root = flare;
alert(root); // This prints object object
});
// This runs before `abc.json` has been fetched
alert(root); // This will show 'initial value'
在当前执行上下文终止并且已获取abc.json
文件之后,将调用回调函数,即使它是从浏览器的缓存中获取的。
因此,您会注意到initial value
的提醒发布在[Object object]
的提醒之前。