Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么将变量设置为自身可以使事情正常工作?_Javascript_D3.js - Fatal编程技术网

Javascript 为什么将变量设置为自身可以使事情正常工作?

Javascript 为什么将变量设置为自身可以使事情正常工作?,javascript,d3.js,Javascript,D3.js,我有两段代码,第一段不起作用,第二段起作用 件#1 件#2 然而,有趣的是,如果我在非工作代码末尾记录g,我会得到: 但如果我记录工作代码,我实际上会得到: 尽管在评论中已经解释了这个问题,但有必要给出正确的答案 这里的主要概念是,一些方法,如enter(),返回新的选择。话虽如此,让我们看看您的工作片段,第1部分: 这是您的更新选择,因此我们将其称为update 然后,在那之后,你有: update = update.enter().append("svg:g").call(drag).me

我有两段代码,第一段不起作用,第二段起作用

件#1

件#2

然而,有趣的是,如果我在非工作代码末尾记录g,我会得到:

但如果我记录工作代码,我实际上会得到:


尽管在评论中已经解释了这个问题,但有必要给出正确的答案

这里的主要概念是,一些方法,如
enter()
,返回新的选择。话虽如此,让我们看看您的工作片段,第1部分:

这是您的更新选择,因此我们将其称为
update

然后,在那之后,你有:

update = update.enter().append("svg:g").call(drag).merge(update)
update = update.enter().append("svg:g");
如前所述,
enter()
返回一个新的选择。我们称之为
enter
。所以,事实上,你有:

update = enter.merge(update);
enter = enter.merge(enter);
这是合并选择的正确(惯用)方法

现在,让我们看看你的第二个(非工作)片段,第2部分。在第三行中,您有:

update = update.enter().append("svg:g").call(drag).merge(update)
update = update.enter().append("svg:g");
您刚刚将
update
转换为enter选择。因此,在下一行中,您有:

update = enter.merge(update);
enter = enter.merge(enter);

当然,这不起作用:您正在合并输入选择。

不同之处在于调用
merge()
时,
g
具有不同的值。在代码片段1中,
g
是您的更新选择;在代码片段2中,这是您的输入选择。这里的问题很简单,上面Noleli的评论解释了这一点:您正在合并不同的东西。只需停下来检查每一步的
g
含义。