使用D3.js时Javascript闭包不能正确访问外部变量?
在用d3.js v5版本,如下javascript代码片段
let colorData = [1, 2, 3, 4, 5, 6, 7, 8];
let colorSchemes = [
d3.scaleOrdinal(d3.schemeCategory10),
d3.scaleOrdinal(d3.schemeAccent),
d3.scaleOrdinal(d3.schemePaired),
d3.scaleOrdinal(d3.schemePastel1),
d3.scaleOrdinal(d3.schemeDark2),
d3.scaleOrdinal(d3.schemeSet1)
];
let scheme = colorSchemes[0];
let test_color = scheme(1); // test_color = #1f77b4
// here ignore some code about "svgs"
svgs.selectAll("circle")
.data(colorData).enter()
.append("circle")
.attr("fill", (d, i) => {
let scheme = colorSchemes[i];
return scheme(d); // the console log "scheme is not a function"
});
为什么test_color
能正确取得值,而闭包内同样的代码不能正确执行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自问自答。
原来我把上面代码中的变量
i
的含义弄错了,i
是colorData的索引号,不是colorSchemes的索引号。下面的更正后的代码: