我有两个具有相同逻辑的函数(例如:在控制台中打印多个串联元素),但有一个特殊性。最简单的方法是指定参数的特殊性,如下所示:
function baseLogic (specific, general) {
// ... many processes before here
if(specific == "info") console.info(general)
if(specific == "warn") console.warn(general)
}
// Calls
baseLogic("info", "foo")
baseLogic("warn", "bar")
但是,我想用函数来处理这种特殊性,而不是作为参数,如下所示:
function baseLogic (specific, general) {
// ... many processes before here
if(specific == "info") console.info(general)
if(specific == "warn") console.warn(general)
}
function info(general) {
baseLogic("info", general)
}
function warn(general) {
baseLogic("warn", general)
}
// Calls
info("foo")
warn("foo")
问题是,例如,当我想添加/删除参数时,我需要在各处添加/删除它
有什么办法可以做得更好吗?
类似这样的事情:
function baseLogic (specific, general) {
// ... many processes before here
if(specific == "info") console.info(general)
if(specific == "warn") console.warn(general)
}
info = baseLogic("info")
warn = baseLogic("warn")
// Calls
info("foo")
warn("bar")
提前致谢!
最佳答案
也许您正在寻找的是 curry 函数:
// no curry
const sum = (a, b) => a + b
// no curry usage
sum(3, 4)
// curry
const sum = a => b => a + b
// curry usage
sum (2)(1);
关于JavaScript 可重用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044576/