js-柯里化-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

js-柯里化

简介: 1.定义:   把一个接受多个参数的函数变成一个以原函数首参数为参数并且返回一个函数来参数其他参数。   简单就是把一个含有多个参数的函数,变成分步来完成传参来并且返回函数的函数 2.例子://将多个参数的函数转为单一参数的函数 function fn(a,b,c){ return a+...

1.定义:

  把一个接受多个参数的函数变成一个以原函数首参数为参数并且返回一个函数来参数其他参数。

  简单就是把一个含有多个参数的函数,变成分步来完成传参来并且返回函数的函数

2.例子://将多个参数的函数转为单一参数的函数

function fn(a,b,c){ return a+b+c }
function curry(fn){
  var args = [];
  return function fe(){
    args = args.concat([].slice.call(arguments,0))
    if(args.length = fn.length) return fn.apply(null,args)
    else fe
  }
}


//延时执行,执行前可以做一些判断
var state = false;
function doSomeThing(fn,state) {
return function () {
if(state == true){
return fn.apply(null,arguments)
}else {
return state
}
}
}
function add(a,b) {
return a+b
}
console.log(doSomeThing(add,state)(1,2))
state = true
console.log(doSomeThing(add,state)(1,2))

//函数节流(事件节流)  防止多次点击等事件
function curry(fn,delay) {
var preTime = 0
return function () {
var currentTime = parseInt(new Date().getTime())
if(currentTime - preTime > delay){
preTime = currentTime
return fn.apply(null,arguments)
}
}
}
function add(a,b) {
return a+b
}
var curry = curry(add,100)
console.log(curry(1,2))
setTimeout(function () {
console.log(curry(1,2))
},300)
console.log(curry(1,2))

//防止抖动  页面抖动等
function curry(fn,delay) {
var loop;
return function () {
clearTimeout(loop)
var args = arguments
loop = setTimeout(function () {
fn.apply(null,args)
},delay)
}
}
function add(a,b) {
console.log(a+b)
}
var curry = curry(add,100)
curry(1,2)
curry(3,2)








  

3.基础:

  闭包

  函数作为返回值

  函数作为参数延时执行

  apply 函数

 

4.作用:

  参数服用

  计算延时执行

  动态创建函数

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章