首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏webTower

    函数

    在计算机科学中,(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。 函数 函数指的是将能够接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数的技术。 ); // 6 add(1)(2)(3); // 6 上面的 add 函数就是一个被函数,这个函数接收三个参数,但是调用时参数可以传一个或两个或一次直接传三个,而最终返回的值是一样的。 我们可以定义一个函数,这个函数的参数是一个函数,而返回一个新的函数,这个函数就是被后的函数。 这个包装函数就可以在第一次就知道被包装的函数有几个参数,在适当的时候返回结果。 // 那就执行被函数 return fn.apply(this,args); }else{ // 否则继续返回一个新的函数

    74320发布于 2019-10-23
  • 来自专栏前端学习文档

    函数

    source=cloudtencent 什么是函数函数(Haskell Brooks Curry),当一个函数有多个参数的时候先传递一部分参数并且调用它(这部分参数后续不会进行改变),然后返回一个新的函数接收剩余的参数并返回结果。 总结 可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数 这是一种对函数参数的 "缓存" 让函数变的更灵活,让函数的粒度更小 基础案例# 案例 1 function checkAge // 封装函数 function curry(fn) { return function curriedFn(...args) { if (args.length < fn.length = fn1(2) // 返回新函数,接收剩余的参数 const fn3 = fn2(3) // 返回结果 6

    52520编辑于 2023-06-06
  • 来自专栏前端小学生

    函数

    一、定义把一个接受多个参数的函数变为接受一个参数的函数,同时返回剩余参数且返回结果的新函数二、应用提取公共函数,接受至少两个参数,一个是处理函数,其余参数是处理函数所需的参数,以下代码为校验的方法 读取arguments往往比直接读取命名参数要稍微慢,尤其老版本浏览器则很明显四、面试真题实现以下这么sum函数,满足一下需求sum(1, 2) == 3sum(1)(2) == 3sum(1)(2, 3) == 6sum(1)(2)(3)(4) == 10分析如下:1. 参数数量不一,考虑使用闭包存储每次的参数2. 支持链式调用,需返回function3.

    53240编辑于 2023-05-28
  • 来自专栏前端小课堂

    函数

    后面几部分将结合实际应用场景介绍高阶函数的应用,本节先来聊聊函数,通过介绍其定义、比较常见的三种应用、并在最后实现一个通用的 currying 函数,带你认识完整的函数 定义 函数又叫部分求值,维基百科中对 (Currying) 的定义为: 在数学和计算机科学中,是一种将使用多个参数的函数转换成一系列使用一个参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术 3) // 3 所以在的场景中,不建议使用 ES6 的函数参数默认值。 (3); // Uncaught TypeError: fn(...) is not a function 我们期望函数 fn 输出 [1, 2, 3],但是实际上调用函数时 ((a = 1, 小结 我们通过定义认识了什么是函数,并且介绍了三种实际的应用场景:延迟计算、动态创建函数、参数复用,然后实现了强大的通用 currying 函数,不过更像是 (currying) 和偏函数

    1.2K10发布于 2019-09-04
  • 来自专栏TopFE

    函数通用函数

    commonCurrying(function(x) { return function(y) { return x + y } }) console.log(addNum(1)(2)

    67520编辑于 2022-01-24
  • 来自专栏网站建设、网站制作专栏

    javascript教程:实现函数与反

    下面来一起看看究竟什么是函数 维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。 /www.cnblogs.com/dengyao-blogs/p/11475575.html )来进行返回一个函数,内部函数接收除开第一个参数外的其余参数进行操作并输出,这个就是函数; 举个小例子 s(1)(2)(3)(); //也可以一次性传入多个参数 s(1,2,3); console.log(s()); JS函数的优点: 1.可以延迟计算,即如果调用函数传入参数是不调用的 ,会将参数添加到数组中存储,等到没有参数传入的时候进行调用; 2.参数复用,当在多次调用同一个函数,并且传递的参数绝大多数是相同的,那么该函数可能是一个很好的候选。 世间万物相对,有因必有果,当然了,有必然有反; 反(uncurrying) 从字面意思上来讲就是跟的意思相反;其实真正的反的作用是扩大适用范围,就是说当我们调用某个方法的时候

    97920发布于 2019-09-10
  • 来自专栏Cellinlab's Blog

    JS 手写: 函数

    # function currying # currying 一个 currying 的函数首先会接收一些参数,接收了这些参数后,该函数并不会立即求值,而是继续返回另一个函数,刚才传入的参数在函数形成的闭包过程中被保存起来 args); } else { [].push.apply(args, arguments); // callee 是 arguments 对象的一个属性,用于引用该函数函数体内当前正在执行的函数 ] })(1,2,3); Function.prototype.call 和 Function.prototype.apply 本身也可以被 uncurrying,使函数调用看起来像 Scheme var = function(name) { console.log(this.name); // seven console.log(arguments); // [1,2,3] }; apply(fn2 , { name: 'seven' }, [1, 2, 3]);

    2.9K20编辑于 2023-05-17
  • 来自专栏不知非攻

    十、详解函数

    _A(1, 2, 3); _A(1, 2)(3); _A(1)(2, 3); _A(1)(2)(3); A(1, 2, 3); 函数A被createCurry转化之后得到函数_A,_A能够处理A的所有剩余参数 因此也被称为部分求值。 在简单的场景下,可以不用借助通用式来转化得到函数,我们凭借眼力自己封装。 例如有一个简单的加法函数,他能够将自身的三个参数加起来并返回计算结果。 add(1, 2, 3); _add(1)(2)(3); 当然,靠眼力封装的函数自由度偏低,通用式具备更加强大的能力。因此我们需要知道如何去封装这样一个的通用式。 聪明的读者可能已经发现,把函数经过createCurry转化为一个函数,最后执行的结果,不是正好相当于执行函数自身吗?是不是把简单的问题复杂化了? 我们不知道函数会执行几次。因此我们不能使用上面我们封装的createCurry的通用公式来转换一个函数。只能自己封装,那么怎么办呢?在此之前,补充2个非常重要的知识点。

    89620发布于 2020-07-27
  • 来自专栏随便写写-kifuan

    JS函数无限

    源码 点击这里前往Github查看本文源码,文件名中有arrow-func的就是用箭头函数实现的版本。 不用箭头函数的实现 网上看到很多用箭头函数的版本,在看不懂的时候非常的眼花。 arguments 第4行判断了总参数totalArgs与原始函数的长度f.length,如果参数数量足够,那就直接调用原始函数f并且返回结果 第7行就是如果说参数还不够,那就把总参数totalArgs curry包装起来,等待下一次调用 那么我们可以试一下好不好用,读者也可以打开控制台试一试: const add = (a, b, c) => a + b + c curry(add)(1)(2) (3) curry(add)(1, 2)(3) curry(add)(1)(2, 3) curry(add)(1, 2, 3) 以下结果全都是6,符合我们的要求。 箭头函数轻量级实现 众所周知,箭头函数是一种轻量级的函数,它不像function那样会有冗余的字段。

    3.4K20编辑于 2022-10-24
  • 来自专栏SpiritLing

    js 函数(Currying)

    原文链接:https://blog.spiritling.cn/posts/c0f17b1f/ 在计算机科学中,(Currying),又译为卡瑞或加里,是把接受多个参数的函数变换成接受一个单一参数 从一道面试题谈谈函数从一道面试题谈谈函数 题目:使用 js 实现 add(1)(2)(3)(4) 返回 10 函数要求多个参数转为单一参数,所以相当于 function add() () { // do something } // 调用:addCurrying(1)(2)(3)(4) => [1, 2, 3, 4] 闭包拿参数 闭包:定义在一个函数内部的函数,静态保存所有了父级作用域的内部函数 此方法调用返回数组 _add.getResult = function () { return result; }; return _add; }; 这样通过上面函数就可以实现基本的要求 结束 通过上面的研究,解决一个函数问题。

    2.4K20发布于 2020-07-20
  • 来自专栏一个小程序员的成长笔记

    函数理解笔记

    在详解JS函数看到了这么一个例子,有助于大家理解的执行逻辑,我稍微梳理一下。 ); 4 5 // 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值 6 var _adder = function() { 7 _args.push (3).toString()); add(1)(2)(3).toString() 先执行 add(1) ,此时代码可以理解为已经变成了 _adder(2)(3).toString() ,而变量_args 接下来开始执行 _adder(2) ,函数_adder在之前就已经被成功赋值了方法如下: var _adder = function() {   _args.push(...arguments);    总的来说吧,函数的优点主要就是看着很好看,很省代码。但是又是闭包,又是.call,性能上肯定是不如简易逻辑的。不过差别多少看个人感觉了,其实基本是感觉不到的。用不用,还是要根据项目情况衡量了。

    57130发布于 2019-07-01
  • 来自专栏leon的专栏

    与反

    前言 ,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数,是一个逐步接收参数的过程。 反,是一个泛型的过程。它使得被反函数,可以接收更多参数。目的是创建一个更普适性的函数,可以被不同的对象使用。有鸠占鹊巢的效果。 一、 1.1 例子 实现 add(1)(2, 3)(4)() = 10 的效果 依题意,有两个关键点要注意: 传入参数时,代码不执行输出结果,而是先记忆起来 当传入空的参数时,代表可以进行真正的运算 另外,由于计算结果的方法,是作为参数传入currying函数,所以要利用apply进行执行。 综合上述思考,就可以得到以下完整的函数。 由此可以得出,反后,第一个参数,是用来指定this指向的。

    83320发布于 2019-08-28
  • 来自专栏全沾开发(huā)

    与反

    与反 最近在看一本书《JavaScript函数式编程》 里边提到了一个名词,(currying),阅读后发现在日常开发中经常会用到函数。 以及还有他的反义词反(unCurrying) 被称为部分计算函数,也就是会固定一部分参数,然后返回一个接收剩余参数的函数。目的是为了缩小适用范围,创建一个针对性更强的函数。 // => foo(arg1)(arg2) unCurrying obj.foo(arg1, arg2) // => foo(obj, arg1, arg2) currying 一个函数的简单应用 小记 在《JavaScript函数式编程》中提到了,高阶函数的几个特性: 以一个函数作为参数 以一个函数作为返回值 /反只是其中的一小部分。 其实还分为了向右、向左(大概就是preArgs和args的调用顺序问题了) 用函数构建出新的函数,将函数组合在一起,这个是贯穿这本书的一个理念,在现在大量的面向对象编程开发中,能够看到这么一本书

    1.3K110发布于 2018-04-12
  • 来自专栏全沾开发(huā)

    与反

    与反 最近在看一本书《JavaScript函数式编程》 里边提到了一个名词,(currying),阅读后发现在日常开发中经常会用到函数。 以及还有他的反义词反(unCurrying) 被称为部分计算函数,也就是会固定一部分参数,然后返回一个接收剩余参数的函数。目的是为了缩小适用范围,创建一个针对性更强的函数。 // => foo(arg1)(arg2) unCurrying obj.foo(arg1, arg2) // => foo(obj, arg1, arg2) currying 一个函数的简单应用 小记 在《JavaScript函数式编程》中提到了,高阶函数的几个特性: 以一个函数作为参数 以一个函数作为返回值 /反只是其中的一小部分。 其实还分为了向右、向左(大概就是preArgs和args的调用顺序问题了) 用函数构建出新的函数,将函数组合在一起,这个是贯穿这本书的一个理念,在现在大量的面向对象编程开发中,能够看到这么一本书

    1.1K10发布于 2019-12-05
  • 来自专栏漫画前端

    浅谈与反

    公众号回复 [加群 ] 加入我们一起进步~ 作者 leon 前言 ,可以理解为提前接收部分参数,延迟执行,不立即输出结果,而是返回一个接受剩余参数的函数。因为这样的特性,也被称为部分计算函数,是一个逐步接收参数的过程。在接下来的剖析中,你会深刻体会到这一点。 反,是一个泛型的过程。它使得被反函数,可以接收更多参数。目的是创建一个更普适性的函数,可以被不同的对象使用。 一、 1.1 例子 实现 add(1)(2, 3)(4)() = 10 的效果 依题意,有两个关键点要注意: - 传入参数时,代码不执行输出结果,而是先记忆起来 - 当传入空的参数时,代表可以进行真正的运算 另外,由于计算结果的方法,是作为参数传入currying函数,所以要利用apply进行执行。 综合上述思考,就可以得到以下完整的函数。 由此可以得出,反后,第一个参数,是用来指定this指向的。

    62810发布于 2020-12-16
  • 来自专栏Krryblog

    js 高阶函数

    博客地址:https://ainyi.com/74 定义 在计算机科学中,(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术 ) 实现 Currying 函数 可以理解所谓的函数,就是封装==一系列的处理步骤==,通过闭包将参数集中起来计算,最后再把需要处理的参数传进去 实现原理就是用闭包把传入参数保存起来,当传入参数的数量足够执行函数时 我们期望函数 fn 输出 1, 2, 3,但是实际上调用函数时 ((a = 1, b, c) => {}).length === 0 所以调用 fn() 时就已经执行并输出了 1, undefined , undefined,而不是理想中的返回闭包函数 所以后续调用 fn()(2)(3) 将会报错 小结&链接 定义:是一种将使用多个参数的函数转换成一系列使用一个参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术 == 参考文章:JavaScript专题之函数 博客地址:https://ainyi.com/74

    3.4K40发布于 2019-05-24
  • 来自专栏张家辉的树屋

    JavaScript: 函数式编程 -

    了解JavaScript函数式编程目录 0-了解 JavaScript 函数式编程 - 什么是纯函数 1-了解 JavaScript 函数式编程 - 2-了解 JavaScript 函数式编程 即策略性地把要操作的数据(String, Array)放到最后一个参数。到使用它们的时候你就明白这样做的原因是什么了。 下面我们开始使用上面的代码,看看为什么会这么去处理我们的函数。 ) //============== // 使用 `map` 创建一个新的 `words` 函数,使之能够操作字符串数组 var sentences = undefined; // 练习 2 // filterQs = function(xs) { return filter(function(x){ return match(/q/i, x); }, xs); }; // 练习 3( curry 函数 // //[1,2,3].slice(0, 2) var slice = undefined; // use curry 2: // ============ // 借助 `slice

    83220发布于 2021-02-02
  • 来自专栏Newxc03的前端之路

    JavaScript函数的实现

    函数指的是一种将多种参数的一个函数转换成一系列使用一个参数的函数的技术 function curry(fn,args){ //获取函数需要的参数长度 let length = args.length for(let i=0;i<arguments.length;i++){ subArgs.push(arguments[i]); } //判断参数的长度是否已经满足函数所需参数的长度 if(SubArgs.length>=length){ //如果满足,执行函数 return fn.apply(this,subArgs) }else { //如果不满足,递归返回函数,等待参数的传入 return curry.call(this,fn,subArgs); } } }

    56520编辑于 2022-05-11
  • 来自专栏全栈程序员必看

    JavaScript专题之函数

    JavaScript 专题系列第十三篇,讲解函数以及如何实现一个 curry 函数 定义 维基百科中对 (Currying) 的定义为: In mathematics and computer 函数可以做到 var addCurry = curry(add); addCurry(1)(2) // 3 用途 我们会讲到如何写出这个 curry 函数,并且会将这个 curry 函数写的很强大 addCurry(1, 2) // 3 已经有的感觉了,但是还没有达到要求,不过我们可以把这个函数用作辅助函数,帮助我们写真正的 curry 函数。 1, _, _, 4)(_, 3)(2)(5); fn(_, 2)(_, _, 4)(1)(3)(5) 写在最后 至此,我们已经实现了一个强大的 curry 函数,可是这个 curry 函数符合的定义吗 可是将一个多参数的函数转换成多个单参数的函数,但是现在我们不仅可以传入一个参数,还可以一次传入两个参数,甚至更多参数……这看起来更像一个 (curry) 和偏函数 (partial application

    69010编辑于 2022-07-20
  • 来自专栏分享技术

    本文旨在介绍函数式编程中的概念,以及在JavaScript中应该何时使用它。本文将首先解释什么是,然后展示它在函数式编程背景下的用处。 什么是是指函数永远只接受一个参数,如果需要处理多个参数,则返回另一个函数来接收单一的参数。相比之下,常规非函数可以接受多个参数。 以下是一个常规、非函数的例子:const add = (x, y) => x + yconsole.log( add(2, 3) // 2 + 3) // prints 5这是一个简单的函数,它接受两个参数并返回它们的和 (3)(4)(5) // 1 + 2 + 3 + 4 + 5) // prints 15由于函数的工作方式,我们可以进行称为部分应用的操作。 不管我们给它传入什么参数,它都会+2 。什么时候使用函数呢?函数在我们的普通的函数时是没有什么优势的,他的真正优势在于组合使用,只有在组合使用时才它能真正发挥了作用。

    21000编辑于 2023-11-29
领券