我正在使用 d3 并希望将一些变量传递到由 selection.each() 调用运行的函数的范围内。我在外部函数中声明变量 e
和 D
,然后在该函数中,在声明我的变量之后,对类 的所有内容运行匿名函数>.点数
。我的问题是,如果不将它们设为全局变量,我似乎无法将 D
和 e
放入内部函数的范围内。有没有一种简单的方法可以将它们传递给内部函数?
function endSelection(d){
var e = selector.extent();
var D = d;
mainSVG.selectAll(".points")
.each(function(d){
if(d[D.x] >= e[0][0]){
d3.select(this).call(addClass,["foo"])
d3.select(this).call(removeClass,["bar"])
} else {
d3.select(this).call(addClass,["bar"])
d3.select(this).call(removeClass,["foo"])
};
});
}
最佳答案
您不需要在该匿名函数的形式参数中列出“d”。
mainSVG.selectAll(".points")
.each(function(){
if(d[D.x] >= e[0][0]){
在外部作用域中声明的变量在内部作用域中总是可用,除非它们被相同标识符的更内部声明“遮蔽”。这就是您的代码中发生的事情。
你根本不需要“D”;仅引用“d”。现在,如果 d3 代码将一些有用的东西传递给用作 .each()
迭代器的函数,则声明它,但给它一个不同于“d”的名称:
mainSVG.selectAll(".points")
.each(function(not_d){
if(not_d[d.x] >= e[0][0]){
关于javascript - 如何将变量带入 d3 中的 .each 方法的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388078/