使用匿名功能进行单线程的重点是什么?

时间:2016-03-30 07:14:01

标签: javascript d3.js

我常常看到像这样的代码(这不是D3特定的东西,这只是一个例子)

svg.append("text")
    .text(function() {
        return round2DP(d.frequency); // d refers to a data element; d.frequency is a float. round2DP() rounds to 2 decimal places.
    }) // etc

为什么要使用匿名函数?为什么不写.text(round2DP(d.frequency))?它似乎更简单,更易读,对我更有意义:为什么在不需要的情况下创建一个不必要的函数?但我一直都看到这一点。这些事情背后的原因是什么?

编辑:为了澄清,在这种特殊情况下,.text()可以同时接受函数和值,因此不一定期待回调。

2 个答案:

答案 0 :(得分:2)

  

为什么不写.text(round2DP(d.frequency))?

由于function(){}功能参考round2DP(d.frequency)函数调用

在第一种情况下,您传递的是一个函数(尚未执行),在第二种情况下,您传递函数调用的返回值。

这取决于text方法所期望的参数。如果您的text()方法接受 function-reference 参数,那么您需要选择第一个,否则如果它正在寻找返回值round2DP(d.frequency),则选择第二个。

如果text同时接受两者并且两者都提供相同的输出,则which one to choose将取决于您的上下文。您可以根据自己对可读性和可维护性的偏好进行选择。

答案 1 :(得分:-1)

因为您调用函数而不是将其作为回调传递。在你的情况下,正确的方法是:

svg.append("text")
    .text(round2DP.bind(null/*context*/, d.frequency))