• javaScript函数柯里化


    1.什么是Currying?

      考虑一个三维空间方程 F(x, y, z)= 0,如果我们限定z = 0,于是得到 F(x, y, 0) = 0 记为 F’(x, y)。

      这里F’显然是一个新的方程式,它代表三维空间曲线F(x, y, z)在z = 0 平面上的两维投影。

      记y = f(x, z), 令z = 0, 得到 y = f(x, 0),记为 y= f’(x),我们说函数f’是f的一个Currying解。

    2.看个小例子

     1 var foo = function(x) {
     2   return function(y) {
     3     return x + y;
     4   }
     5 }
     6 
     7 //有两种调用方法
     8 var a = foo(3);
     9 var b = a(4);
    10 
    11 var c = foo(3)(4);

    3.柯里化:把接受多个参数的函数变换成接受一个单一参数的函数,并且返回一个新函数,这个新函数能够接受原函数的参数。

     1 function curry(fn) {
     2 
     3     //获取第一个参数后的所有参数
     4     var args = Array.prototype.slice.call(arguments, 1);
     5 
     6     return function() {
     7         //获取传给匿名函数的参数
     8         var innerArgs = Array.prototype.slice.call(arguments);
     9 
    10         //已输入的参数和此次输入的参数构成参数调用fn
    11         var finalArgs = args.concat(innerArgs);
    12          retrun   fn.apply(null, finalArgs);
    13     };
    14 }
     1 function curry(fn) {
     2 
     3     //获取第一个参数后的所有参数
     4     var args = Array.prototype.slice.call(arguments, 1);
     5 
     6     return function() {
     7         //获取传给匿名函数的参数 var innerArgs = arguments;?可以不?
     8         var innerArgs = Array.prototype.slice.call(arguments);
     9         
    10         //已输入的参数和此次输入的参数构成参数调用fn
    11         var finalArgs = args.concat(innerArgs);
    12          retrun   fn.apply(null, finalArgs);
    13     };
    14 }

    4.应用:待续

  • 相关阅读:
    5月做题计划(数据结构)
    SRM 545 DIV2
    6月做题计划(递归与分治)
    POJ 3121 The SetStack Computer
    struts2初步学习路线
    my97datepicker日历展示出现中文乱码的问题
    tomcat请求数据的编码设置
    STRUT2传递参数中文乱码解决方法
    js mine 类型javascripttext/javascript,application/javascript, and appliation/xjavascript
    eclipse内存设置参数
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3264781.html
Copyright © 2020-2023  润新知