亚咪吧 关注:15贴子:538
  • 1回复贴,共1

柯里化的一点思考

只看楼主收藏回复

//2. 提前返回/** * 1. 参数复用:通过柯里化,可以将一个接受多个参数的函数转化为一系列接受单个参数的函数。这样可以方便地复用函数,并且可以在不同的上下文中使用不同的参数组合。在代码中,add函数被柯里化为addCurry,可以通过连续调用返回的函数来传递参数,实现参数复用。
2. 提前返回:在代码中,ajax函数被柯里化为ajaxCurry,然后通过ajaxCurry('POST')创建了一个新函数post。这个新函数post的第一个参数type被设置为'POST',然后可以通过调用post('/api', 'name=curry')来发送POST请求。这种方式可以提前设置函数的一部分参数,使函数调用更加简洁和灵活。
3. 延迟计算:通过柯里化,可以将函数的参数分步传递,延迟计算。在代码中,add2函数被柯里化为addCurry2,然后通过连续调用返回的函数来逐步传递参数。例如,addCurry2(1)(2)(3)会返回结果6。这种方式可以在需要时逐步传递参数,延迟函数的执行。
总的来说,函数柯里化是一种函数转换技术,通过将多个参数的函数转化为一系列接受单个参数的


IP属地:福建1楼2023-07-31 16:25回复
    //函数柯里化的几个作用//1. 参数复用function add(a, b, c) { return a + b + c;}const addCurry = curry(add);console.log(addCurry(1)(2)(3)); // 6console.log(addCurry(1, 2)(3)); // 6console.log(addCurry(1)(2, 3)); // 6
    //2. 提前返回/** * 1. 参数复用:通过柯里化,可以将一个接受多个参数的函数转化为一系列接受单个参数的函数。这样可以方便地复用函数,并且可以在不同的上下文中使用不同的参数组合。在代码中,add函数被柯里化为addCurry,可以通过连续调用返回的函数来传递参数,实现参数复用。
    2. 提前返回:在代码中,ajax函数被柯里化为ajaxCurry,然后通过ajaxCurry('POST')创建了一个新函数post。这个新函数post的第一个参数type被设置为'POST',然后可以通过调用post('/api', 'name=curry')来发送POST请求。这种方式可以提前设置函数的一部分参数,使函数调用更加简洁和灵活。
    3. 延迟计算:通过柯里化,可以将函数的参数分步传递,延迟计算。在代码中,add2函数被柯里化为addCurry2,然后通过连续调用返回的函数来逐步传递参数。例如,addCurry2(1)(2)(3)会返回结果6。这种方式可以在需要时逐步传递参数,延迟函数的执行。
    总的来说,函数柯里化是一种函数转换技术,通过将多个参数的函数转化为一系列接受单个参数的 */function ajax(type, url, data) { //定义一个ajax函数,接收三个参数 const xhr = new XMLHttpRequest(); //创建一个XMLHttpRequest对象 xhr.open(type, url, true); //初始化请求 xhr.send(data); //发送请求}const ajaxCurry = curry(ajax); //将ajax函数柯里化const post = ajaxCurry('POST'); //将ajax函数的第一个参数type设置为'POST',返回一个新函数postpost('/api', 'name=curry'); //调用post函数,传入url和data参数,发送POST请求
    //3. 延迟计算function add2(a, b, c) { return a + b + c;}const addCurry2 = curry(add2);const addCurry2_1 = addCurry2(1);const addCurry2_2 = addCurry2_1(2);console.log(addCurry2_2(3)); // 6
    function curry(fn) { const len = fn.length; return function curried(...args) { if (args.length >= len) { return fn.apply(this, args); } else { return function (...args2) { return curried.apply(this, args.concat(args2)); }; } };}
    //立即执行函数/** * 这段代码是一个立即执行函数,它的作用是根据浏览器支持的事件监听方法,返回一个适合的事件绑定函数。具体来说:
    - 如果浏览器支持addEventListener方法,那么返回一个函数element.addEventListener(type, listener, userCapture),用于给指定元素绑定事件监听器。这个函数会在事件触发时调用listener函数,并将事件对象作为参数传递给listener函数。- 如果浏览器支持attachEvent方法,那么返回一个函数element.attachEvent("on" + type, handler),用于给指定元素绑定事件处理函数。这个函数会在事件触发时调用handler函数,并将事件对象作为参数传递给handler函数。
    这段代码的好处是它封装了浏览器事件监听的细节,使得在 */const whichEvent=(function(){ if(window.addEventListener){ return function(element,type,listener,userCapture){ element.addEventListener(type,function(e){ listener.call(element,e); },userCapture) } }else if(window.attachEvent){ return function (element,type,handler){ element.attachEvent("on"+type,function(e){ handler.call(element,e); }) } }})();
    function a(x) { let sum = x; function inner(y) { sum += y; return inner; } inner.toString = function () { return sum; }; return inner;}console.log(a(1)(2)(3)(4).toString()); // 10
    //定义一个函数add,用于实现柯里化加法function add(){ let args=[].slice.call(arguments); //将参数转化为数组 let inner=function(){ //定义一个内部函数inner args.push(...arguments); //将新的参数添加到args数组中 return inner; //返回inner函数 } inner.toString=function(){ //重写inner函数的toString方法 return args.reduce( //使用reduce方法计算args数组的和 function(pre,cur){ return pre+cur; } ) } return inner; //返回inner函数}const result=add(1)(2)(3)(4)(5)+"" //调用add函数,传入多个参数,将结果转化为字符串console.log(result) //输出结果


    IP属地:福建2楼2023-07-31 16:25
    回复