1

我正在使用 d3 并希望将一些变量传递到由 selection.each() 调用运行的函数的范围内。我在一个外部函数中声明变量eD然后在该函数中,在声明我的变量之后,在类的所有内容上运行一个匿名函数.pointsD我的问题是,如果不使它们成为全局变量,我似乎无法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"])
            };
        });
}
4

1 回答 1

3

您不需要在该匿名函数的形式参数中列出“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]){
于 2013-03-13T14:27:34.563 回答