【发布时间】:2021-11-29 08:57:15
【问题描述】:
我正在尝试理解函数式编程并看到以下示例:
function onceOnly(f) {
var hasRun = false;
return function() {
if(!hasRun){
hasRun = true;
return f();
}
}
}
// Call as many times as you like
var sendWelcomeEmail = onlyOnce(function() {
emailServer.send(...);
});
对此我有一些不明白的地方。
- 这种技术应该保证
emailServer.send(...)只会被调用一次。它是如何做到的?hasRun的状态如何保存? - 在
onceOnly(f)中创建一个返回f()的函数有什么用处?为什么我们不简单地执行以下操作:
function onceOnly(f) {
var hasRun = false;
if(!hasRun){
hasRun = true;
return f();
}
}
这段代码的来源可以找到here
谢谢。
【问题讨论】:
-
您可以查看此答案以了解有关
hasRun的状态如何“保存”的信息:How do JavaScript closures work?
标签: javascript functional-programming higher-order-functions