分享更有价值
被信任是一种快乐

JS中的柯里化Currying怎么用

文章页正文上

这篇文章主要为大家展示了“JS中的柯里化Currying怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS中的柯里化Currying怎么用”这篇文章吧。柯里化将多参数函数转换为一元(单参数)函数。柯里化函数一次接受多个参数。所以如果你有可以写成这种形式正确的使用“柯里化”是因为某些curry函数在使用上更加灵活。Currying 在理论上很棒,但是在 JavaScript 中为每个参数调用一个函数会很累。Ramda 的 curry函数可以让你curriedGreet像这样调用:请注意,你可以选择一次性给出多个参数。此实现在编写代码时更有用。如上所示,你可以在没有参数的情况下永远调用此函数,并且它将始终返回一个需要剩余参数的函数。让我们一起重构和欣赏它。我还在debuggerChrome 开发人员工具中添加了一些语句来检查它。粘贴greetcurry进入您的控制台。然后进入curriedGreet = curry(greet)并开始疯狂。检查我们看到的两个参数,originalFunction并且greet默认initialParams为空数组,因为我们没有提供它。移动到下一个断点,哦等等……就是这样。
是的!curry(greet)只返回一个需要 3 个以上参数的新函数。在控制台中输入curriedGreet以查看我在说什么。当你玩完这个之后,让我们变得更疯狂一点,然后做
sayHello = curriedGreet('Hello').在继续之前,在控制台中输入originalFunction和。initialParams请注意,即使我们在一个全新的函数中免费云主机、域名,我们仍然可以访问这两个参数?这是因为从父函数返回的函数享有其父函数的作用域。在父函数传递之后,他们将参数留给孩子使用。有点像现实生活中的继承。curry最初给出originalFunctioninitialParams然后返回一个“子”函数。这两个变量还没有被处理掉,因为也许那个孩子需要它们。如果他不这样做,那么这个范围就会被清理干净,因为当没有人提到你时,那就是你真正死去的时候。检查nextParams并看到它是['Hello']……一个数组?但我以为我们说curriedGreet(‘Hello’) ,不是curriedGreet(['Hello'])!正确:我们调用curriedGreet了 with 'Hello',但是多亏了rest 语法,我们变成 'Hello'['Hello'].curry是一个通用函数,可以提供 1、10 或 10,000,000 个参数,因此它需要一种方法来引用所有参数。使用类似的 rest 语法捕获一个数组中的每个参数,使curry‘ 的工作更容易。让我们跳到下debugger一条语句。您可能已经注意到第 12 行实际上在debugger第 6 行的语句之前运行。如果不是,请仔细查看。我们的程序在第 5 行定义了一个调用函数curriedFunction,在第 12 行使用它,然后我们debugger在第 6 行点击了该语句。curriedFunction调用的是什么?呸呸呸。查看params第 5 行,您会看到['Hello']. 两者initialParams和都是数组,所以我们使用方便的扩展运算符nextParams将它们展平并组合成一个数组。这就是好事发生的地方。第 7 行说“如果paramsoriginalFunction长度相同,请greet使用我们的参数调用,我们就完成了。” 这使我想起…这就是curry它的魔力!这就是它决定是否要求更多参数的方式。在 JavaScript 中,函数的 .length属性告诉你它需要多少个参数。如果我们提供的和预期的参数匹配,我们很好,只需将它们交给原始函数并完成工作!但是在我们的例子中,参数和函数长度是一样的。我们只提供了‘Hello’,所以params.length是 1,并且originalFunction.length是 3 因为greet需要 3 个参数:greeting, first, last。好吧,由于该if语句的计算结果为false,代码将跳到第 10 行并重新调用我们的主curry函数。它重新接收greet,这一次,'Hello'并重新开始疯狂。这就是递归,我的朋友们。curry本质上是一个无限循环的自调用,参数饥渴的函数,直到他们的客人满了才会休息。热情好客。与以前相同initialParams的参数,除了['Hello']这次。再次跳过以退出循环。在控制台中输入我们的新变量,sayHello. 这是另一个函数,仍然期待更多参数,但我们正在变得更加温暖……让我们把火调大sayHelloToJohn = sayHello('John')。我们又在第 4 行了,而且nextParams['John']。跳到第 6 行的下一个调试器并检查params:它是['Hello', 'John']!?因为请记住,第 12 行说“嘿curriedFunction,他'Hello'上次和‘John’这次都给了我。把他们两个都带进这个阵法[...initialParams, ...nextParams]。”现在curriedFunction再次将length这些params与进行比较originalFunction,因为2 我们移动到第 10 行并curry再次调用!当然,我们传递greet了我们的 2 个参数,['Hello', 'John']我们已经很接近了,让我们完成这一切,并得到完整的问候!sayHelloToJohnDoe = sayHelloToJohn('Doe')我想我们知道接下来会发生什么。greet得到他的参数,curry停止循环,我们收到了我们的问候:Hello, John Doe.多玩一些这个功能。尝试一次提供多个参数或不提供参数,随心所欲地疯狂。curry查看在返回预期输出之前必须递归多少次。以上是“JS中的柯里化Currying怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注云技术行业资讯频道!

相关推荐: 堆排序怎么解决TopK问题

本篇内容主要讲解“堆排序怎么解决TopK问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“堆排序怎么解决TopK问题”吧!在未排序的免费云主机、域名数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册