gpt4 book ai didi

javascript - D3 JS 传递给匿名函数的 F 是什么意思?

转载 作者:行者123 更新时间:2023-11-28 14:57:31 24 4
gpt4 key购买 nike

我正在尝试学习 D3,但我很难理解匿名函数。

在下面的示例中,底部有一个函数(f),它返回带有参数 f 的变量“interpolate”(我认为这本身就是错误的,因为“interpolate”不是一个函数,而是一个变量)。

但是F的含义是什么?我不知道它在“插值”功能中如何或在何处使用。如果我删除 F 并只传递 (),我的动画就会中断。

谢谢! :)

svg.append('path')
.attr('class', 'line')
.attr('d', line(lineData))
.transition()
.duration(3000)
.attrTween('d', pathTween);

function pathTween() {
var interpolate = d3.scale.quantile()
.domain([0,1])
.range(d3.range(0, 7));
return function(f) {
return line(lineData.slice(0, interpolate(f)));
};
}

最佳答案

让我们来分解一下:

....
.attrTween('d', pathTween);

function pathTween() {
var interpolate = d3.scale.quantile()
.domain([0,1])
.range(d3.range(0, 7));
return function(f) {
return line(lineData.slice(0, interpolate(f)));
};
}
  1. 我们将闭包函数 pathTween 传递给 attrTween。在底层,d3 将为您选择的每个元素调用 pathTween(在您的情况下,它只是一个path)。
  2. d3 期望传递给 attrTween 的函数返回一个函数。这是采用参数 f 的匿名函数(大多数 d3 示例将使用变量 t,稍后会详细介绍)。
  3. pathTween 函数是一个闭包,因为它创建内部变量 interpolate 并关闭它,以便它在内部返回函数中可用。你说它返回带有参数f的变量“interpolate”(我认为这本身很尴尬,因为“interpolate”不是一个函数而是一个变量)。这不是真的;首先,我们根本不返回 interpolate(但它在闭包中可用),其次,它是一个存储在变量中的函数。在变量中存储函数在 JavaScript(以及许多其他编程语言)中非常常见。
  4. 现在 d3 具有内部 anon 函数,它将在动画的每个周期(通常每 16 毫秒)调用它。当它调用它时,它会传入ff 是什么?它是一个计时器(为什么它通常被称为t)。它将包含一个从 0 到 1 的值,指示过渡的位置(0 为开始,1 为结束)。然后,将此变量传递给函数 interpolate,该函数恰好需要 0 到 1 之间的值(请参阅 domain[0,1] )。

看看这个:

var interpolate = d3.scale.quantile()
.domain([0,1])
.range(d3.range(0, 7));

console.log(typeof(interpolate));

console.log(interpolate(0));
console.log(interpolate(0.25));
console.log(interpolate(0.5));
console.log(interpolate(1));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - D3 JS 传递给匿名函数的 F 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42294951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com