问题描述
const my_fn = (a) => (b) => a + b
那个,当这样调用时:
my_fn(42)
返回函数 (b) => 42 + b
。
将 my_fn
称为“模板函数”是否正确?
我知道,在诸如 C++ 之类的语言中,“模板”一词具有非常具体的技术含义。 但是在 JavaScript 中,(AFAIK) 没有像 C++ 那样的语法内置模板。
我不想滥用术语。
(相关,可选问题:在 JS 中巧妙地使用高阶函数和在这种语言中进行“泛型编程”有区别吗?)
解决方法
我不会称其为“模板”函数,尽管我可能会称此函数为“函数工厂”。对我而言,C++ 等语言中的“模板”一词意味着将一个函数应用于一系列不同数据类型的特定目标。
像您提供的示例这样的函数在“泛型编程”方面并没有真正实现任何新的东西,因为它不是设计用来生成对不同类型的值进行操作的函数。 Javascript 对类型并不严格,因此您可以将任何类型的值传递给您的函数,并且该语言将尽最大努力使用它。你不需要做任何额外的事情来使一个函数适用于不同类型的对象;除非程序员添加明确的类型检查逻辑,否则每个函数都接受各种对象。