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