gpt4 book ai didi

javascript - 这个模式 f(a)(b)(c) 叫什么?

转载 作者:行者123 更新时间:2023-11-29 10:13:57 25 4
gpt4 key购买 nike

function setStyle(x) {
with (x.style) {
padding = '10px'
marginBottom = '10px'
width = '100%'
}
return setStyle
}

setStyle(account)(password)(login)

我经常使用上面的模式,但是当我需要讲的时候,我不知道它叫什么?如何在对话中引用这种方法?

更新:

有人将此问题作为重复问题关闭,但我不明白为什么它是重复的。其他问题是关于一些框架,张贴者试图理解代码。我不试图理解代码,我问的是已知模式的英文术语。即使讨论的概念相同,问题也不同。这就像说“谁是 Jasckson's Five 中最小的”和“谁的专辑是 Thriller”是同一个问题,只是因为它恰好是关于同一个人的。但这些是不同的问题,并不相同。

最佳答案

此模式不是“函数链接”,因为链接(=组合、流水线)函数通过将一个函数的结果作为参数传递给下一个函数来工作。例如,如果您有以下内容:

str = removeBadChars(str)
str = makeLowerCase(str)
str = convertToURL(str)

你可以更简洁地重写为

str = chain(removeBadChars, makeLowerCase, convertToURL)(str)

(练习:编写 chain())。

您的模式似乎没有名称,可能是因为它相当无用。克罗克福德先生coined 返回一词,但它似乎并没有被广泛使用。

请注意,这种模式本质上是反函数的,因为在函数式编程中我们更喜欢使用纯函数,而“递归”函数只能作为副作用做任何有用的事情。

UPD:这个推理适用于只是盲目返回自身的函数,就像在你的例子中一样,但是,f()()() 语法也可以用于返回 的函数其他 每次调用。在这种情况下,“根”函数接受一个用于携带状态的隐藏参数(“累加器”)。这种方法的一个很好的例子就是像上面那样的 chain(),但是以应用风格编写:chain(func1)(func2)(func3):

function chain(f, fun) {

fun = fun || function(x) { return x };

if(typeof f != "function")
return fun(f);

return function(x) {
return chain(x, function(y) { return f(fun(y)) })
}
}

// Example:

makeLowerCase = function(str) { return str.toLowerCase() };
removeBadChars = function(str) { return str.replace(/\W/g, "") };
makeURL = function(str) { return "http://" + str };

funcs = chain(makeLowerCase)(removeBadChars)(makeURL);
x = funcs('!!! HELLO ???');
alert(x);

在这种情况下,此语法用于实现“部分应用”,因为我们返回一个闭包,该闭包使用预定义的第二个参数再次调用根函数。

关于javascript - 这个模式 f(a)(b)(c) 叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26925812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com