`

javascript 函数curry化

阅读更多

一.柯里化

        在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家哈斯凯尔·加里命名的,尽管它是 Moses Sch?nfinkel 和 戈特洛布·弗雷格 发明的。

        在直觉上,柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数”。所以对于有两个变量的函数,如果固定了 ,则得到有一个变量的函数 。

        在理论计算机科学中,柯里化提供了在简单的理论模型中,比如:只接受一个单一参数的lambda 演算中,研究带有多个参数的函数的方式。
        函数柯里化的对偶是Uncurrying,一种使用匿名单参数函数来实现多参数函数的方法。
实例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>函数curry化</title>  
</head>  
<body>  
	<div>函数curry化</div>
<script type="text/javascript">  
	var foo = function(a) {
	  return function(b) {
	    return a * a + b * b;
	  }
	}
	alert((foo(3))(4));
	alert(foo(3)(4));
</script>
</body>
</html>

运行结果:

 

二.javascript 函数curry化

        当发现正在调用同一个函数,并且传递的参数绝大多数是相同的,那么该函数可能是用于curry化的一个很好的候选参数,可以通过将函数集合部分应用到函数中,从而动态创建一个新函数,这个新函数将会保存重复的参数,并且还会使用预填充原始函数所期望的完整列表。

        curry化就是用闭包原理实现函数参数的合并,然后再运行函数。

实例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>函数curry化</title>  
</head>  
<body>  
	<div>函数curry化</div>
<script type="text/javascript">  
	function curry(fn){
	   	var slice=Array.prototype.slice,
	   	stored_args=slice.call(arguments,1);
	   	alert("stored_args:"+stored_args);
		return function(){
		   	var new_args=slice.call(arguments),
		   	args=stored_args.concat(new_args);
		   	alert("new_args:"+new_args);
		   	alert("args:"+args);
			return fn.apply(null,args);
		}
	}
	function add(a,b,c){
	   return a+b+c;
	}
	alert(curry(add,1)(2,3));
</script>
</body>
</html>

运行结果:

相继弹出如下结果信息



  • 大小: 36.3 KB
  • 大小: 38.4 KB
  • 大小: 37.2 KB
  • 大小: 35.3 KB
  • 大小: 34.2 KB
分享到:
评论

相关推荐

    javascript函数式编程

    JavaScript函数式编程是利用JavaScript语言编写函数式风格代码的一种编程范式。函数式编程强调使用纯函数、避免副作用、函数的不可变性以及利用高阶函数等概念。通过阅读《JavaScript函数式编程指南》,读者可以了解...

    前端JavaScript彻底弄懂函数柯里化curry.docx

    【前端JavaScript彻底弄懂函数柯里化curry】 一、什么是柯里化(curry) 在编程领域,尤其是JavaScript中,柯里化是一种将接受多个参数的函数转换为一系列只接受一个参数的函数的技术。其核心思想是将一个多参数...

    【JavaScript源代码】JavaScript函数柯里化实现原理及过程.docx

    JavaScript函数柯里化是一种将原本接受多个参数的函数转换为接受单个参数的函数的技术,其核心在于将多步计算分解成一系列连续的单参数函数。这种技术源于数学家哈斯凯尔·加里(Haskell Curry)的名字,因此称为...

    javascript函数式编程 underscore.js

    JavaScript函数式编程是一种编程范式,它强调使用函数来组织代码,将计算视为一系列惰性求值的操作。Underscore.js是一个轻量级的JavaScript实用库,它为开发者提供了大量函数式编程工具,使得在JavaScript中实践...

    JavaScript函数柯里化详解_.docx

    JavaScript函数柯里化是一种编程技巧,它源自于数学家哈斯凯尔·加里(Haskell Curry)的名字,因此称为“柯里化”。这种技术的主要目的是将一个多参数的函数转化为一系列单参数的函数,使得每次调用只处理一个参数,...

    JavaScript 函数式编程 (英文版)

    JavaScript函数式编程是一种编程范式,它强调将计算视为对数据进行操作的纯函数,而不是通过改变状态或显式指令来控制程序流程。在JavaScript中,函数式编程可以帮助我们写出更简洁、可读性强且易于测试的代码。下面...

    fecommunity#front-end-interview#17.函数curry化2

    函数柯西化(经典面试题)// 实现一个add方法,使计算结果能够满足如下预期:// 第一次执行时,定义一个数组专门用来存储所有的参数// 在内部声明一个函数,利

    【JavaScript源代码】怎样用Javascript实现函数柯里化与反柯里化.docx

    JavaScript中的函数柯里化(Currying)是一种将接受多个参数的函数转换成一系列接受单一参数的函数的技术。这种技术源自于数学家Haskell Brooks Curry的名字,它的主要思想是每次只处理一个参数,然后返回一个新的...

    JavaScript函数式编程

    JavaScript函数式编程是一种编程范式,它将计算视为数据处理,并强调使用无副作用的纯函数。在JavaScript中,函数式编程允许我们写出更简洁、可读性更强的代码,同时提高了代码的复用性和测试性。本电子教程将深入...

    JS 函数式编程指南 PDF

    柯里化(curry)是函数式编程中常见的一个概念,它是一种将接受多个参数的函数转换成一系列使用一个参数的函数的技术。这种转换允许更灵活的参数使用,从而提高函数的复用性。 代码组合(compose)是函数式编程中的...

    深化解析JavaScript中函数的Currying柯里化_.docx

    JavaScript中的柯里化(Currying)是一种将接受多个参数的函数转换为接受单个参数的函数的技术,每次只处理一个参数,并返回一个新的函数以处理剩余的参数。这种技术源自数学家哈斯凯尔·加德纳·柯里,因此得名。...

    JavaScript函数柯里化原理与用法分析

    在 JavaScript 中,函数柯里化可以让我们更灵活地控制函数的执行,使函数的重用性更高,且更易于组合。 柯里化的原理主要是通过闭包来实现的。当我们传递一些参数给柯里化函数时,这个函数并不立即执行,而是返回一...

    JavaScript_实用函数式Javascript.zip

    在JavaScript中,可以使用`Function.prototype.bind()`或lodash/ramda库中的`curry`函数实现柯里化,这有助于创建可重用的、更灵活的代码。 4. 函数组合(Function Composition):这是将多个小功能组合成更复杂...

    深入解析 JavaScript 中的高阶函数与函数式编程技巧

    JavaScript 中几种重要的高阶函数及其应用方式,其中包括通过 rest 参数传递任意参数(addArrayElements 函数)、数组映射转换(arrToString 方法)、闭包用于封装状态计数器(makeCounter 函数)、柯里化(curry 化...

    js代码-curry函数实现

    Curry化的主要目的是提高代码的可读性和重用性,特别是在函数式编程中。 在JavaScript中,Curry函数的主要思想是将一个多参数的函数拆分成一系列单参数的函数,每次调用只处理一个参数,直到所有参数都被处理完毕。...

    CurryPowder:Curry Javascript函数可允许部分函数应用

    咖喱粉Curry Javascript函数允许部分函数应用程序。用法通过在函数上调用$ curry来实现该函数。 function multiply(a, b) { return a * b;}var multiplyBy5 = $curry(multiply)(5);multiplyBy5(3); // 15multiplyBy5...

    深化剖析JavaScript中的函数currying柯里化_.docx

    柯里化的概念来源于数学家哈斯凯尔·库里(Haskell Curry),并且在函数式编程语言中被广泛使用。 在JavaScript中,柯里化的主要优点包括代码的模块化、重用和预设参数。下面我们将深入探讨如何实现柯里化,并通过...

Global site tag (gtag.js) - Google Analytics