首页 > Web开发 > 详细

js函数柯里化,实现bind

时间:2019-03-21 18:29:12      阅读:144      评论:0      收藏:0      [点我收藏+]

1、柯里化:

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

举个栗子:

一个计算两数之和的函数,需要传递两个参数,柯里化后,这个方法只接受一个参数,但是返回一个函数,用来接收第二个参数

function add(a,b){
  return a+b;  
}

//柯里化后

function add(a){
  return function(b){
    return a+b;
  }  
}

//调用
add(1)(2) //3

柯里化实际上是使用的闭包原理。

2、实现 add(1)(2)(3,4,5)

function add(){
  var args =  [].slice.call(arguments);//将参数复制到新的变量中
  var adder = function(){ 
    [].push.apply(args,[].slice.call(arguments));//args被内部函数引用,形成闭包
    return adder;
  }
  adder.toS = function(){
    //将所有输入的参数累加
   return args.reduce(function(a,b){
      return a+b;
    })
  }
  return adder();//此时要执行一次
}

console.info(add(1,2,3)(4,5)(6).toS()) //21

3、利用柯里化实现js的bind方法

js的call,apply,bind方法的具体使用和区别可以到这位同学的博文里(https://www.cnblogs.com/libin-1/p/6069031.html),写的很详细。

柯里化可以延迟执行某个函数,所以调用bind方法时不是立即执行的

Function.prototype.b=function(){
  var args = [].slice.apply(arguments);
  var scope = args.slice(0,1);//传入的作用域
  var params = args.slice(1);//传入的参数
  return function(){
    //此时的this为调用b时的方法
    this.apply(scope,params);
  }
}

function c(){
  return this.name;
}

//注意bind后要再执行一次,因为bind()不会立即执行需要绑定作用域的方法
console.info(c.bind({name:123})()) //123

 

js函数柯里化,实现bind

原文:https://www.cnblogs.com/panyujun/p/10573495.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!