Javascript闭包和d3
所以在d3中,我想要一个数组来表示这样的函数Javascript闭包和d3,javascript,d3.js,Javascript,D3.js,所以在d3中,我想要一个数组来表示这样的函数 var data = [44,23]; var line = []; for (var i = 0; i < data.length; i++) { line[i] = d3.svg.line() .interpolate("monotone") .y(function(d) { return data[i];
var data = [44,23];
var line = [];
for (var i = 0; i < data.length; i++) {
line[i] = d3.svg.line()
.interpolate("monotone")
.y(function(d) {
return data[i];
});
}
var数据=[44,23];
var行=[];
对于(变量i=0;i
然而,由于闭包的工作方式,i总是被计算为2。有没有一种方法可以使它的计算结果始终为0,然后为1,而不是2?如果异步调用传递到
y
中的内联函数,i
在调用时将等于data.length
。为了避免这种情况,您可以简单地使用arrayforEach
方法,如下所示:
var data = [44,23];
var line = [];
data.forEach(function(dataItem, i) {
line[i] = d3.svg.line()
.interpolate("monotone")
.y(function(d) {
return dataItem;
});
});
如果正在异步调用传递到
y
的内联函数,i
在调用时将等于data.length
。为了避免这种情况,您可以简单地使用arrayforEach
方法,如下所示:
var data = [44,23];
var line = [];
data.forEach(function(dataItem, i) {
line[i] = d3.svg.line()
.interpolate("monotone")
.y(function(d) {
return dataItem;
});
});
只需在JSFIDLE上运行代码,并将d3.js粘贴到源代码中。我的计算结果是0,1。“因为闭包的工作方式”是什么意思?稍后当我需要调用第[0]行()或第[1]行()时,它基本上会调用返回数据[2];我们需要看到更多的代码。根据您所说的,数据[2]将返回未定义的
,因为它只有2个元素。我的计算结果是0,1。“因为闭包的工作方式”是什么意思?稍后当我需要调用第[0]行()或第[1]行()时,它基本上会调用返回数据[2];我们需要看到更多的代码。根据您所说的,数据[2]将返回未定义的,,因为它只有2个元素。请参阅