zoukankan      html  css  js  c++  java
  • 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.应用:待续

  • 相关阅读:
    时间选择器和日期选择器
    paip.c++ qt 项目工程互相引用的方法
    leetcode_question_85 Largest Rectangle in Histogram
    在VirtualBox虚拟机上采集Fedora15系统
    Oracle
    VC6.0调试大全
    oracle中的exists 和not exists 用法详解
    vi常用命令
    【虚拟化实战】容灾设计之四VPLEX
    CentOS6.3 安装配置 ant
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3264781.html
Copyright © 2011-2022 走看看