这个Javascript函数工厂添加了什么价值?

时间:2013-03-01 12:04:19

标签: javascript functional-programming

我偶然发现了这段代码,当外部函数没有接受任何参数时,我真的没有看到返回函数的需要吗?

var percent = (function() {
    var fmt = d3.format(".2f");
    return function(n) { return fmt(n) + "%"; };
})()

我错过了什么或者可以改写为:

var percent = function(n) {
    return d3.format(".2f")(n) + "%";
}

1 个答案:

答案 0 :(得分:5)

它可以,但是你每次都会调用d3.format(".2f")而不是一次。根据功能的作用以及调用的频率,这可能会增加额外的性能开销。

使用IIEF(立即调用函数表达式)返回闭包,您将“缓存”fmt以用于percent的所有未来用途。