javascript中函数柯里化解析
2016-07-21 16:57
471 查看
闭包和柯里化都是javascript经常用到而且比较高级的技巧,所有的函数式编程语言都支持这两个概念,因此,我们想要充分发挥出javascript中的函数式编程特征,就需要深入的了解这些概念。
接下来看一下简单实例
由于update(“newsPanel”)的返回值为一个函数,需要的参数为一个字符串,因此在refresh的Ajax调用中,当success时,会给callback传入服务器端返回的数据信息,从而实现newsPanel面板的刷新,其他的文章面板articlePanel,图片面板picturePanel的刷新均采取这种方式,这样,代码的可读性,可维护性均得到了提高。
一、柯里化的概念
在计算机科学中,柯里化是把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并且返回接收余下的参数且返回结果的新函数的技术。接下来看一下简单实例
var sum = function(num){ return function(y){ return num + y; } } var inc = sum(1); var dec = sum(-1); //这里的inc/dec两个变量实际是两个新的函数,可以通关过括号来调用。 console.log(inc(99)); //100 console.log(dec(101); //100 console.log(sum(100)(2)); //102 console.log(sum(2)(100)); //102 //这样就很容易理解
柯里化的应用
更具柯里化的特性,我们可以写出更有意思的代码,比如在前端开发中经常会遇到这样的情况,当请求从服务器端返回后,需要更新某个特定元素,也就是局部刷新的概念。我们可以这样处理//update会返回一个函数,这个函数可以设置id属性为item的web元素的内容 function update(item){ retrun function(text){ $("div#"+item).html(text); } } //Ajax请求,当成功是调用参数callback function refresh(url, callback){ var params = { type : "echo", data : "" }; $.ajax({ type:"post", url:url, cache:false, async:true, dataType:"json", data:params, //当异步请求成功时调用 success: function(data, status){ callback(data); }, //当请求出现错误时调用 error: function(err){ alert("error : "+err); } }); } refresh("action.do?target=news", update("newsPanel")); refresh("action.do?target=articles", update("articlePanel")); refresh("action.do?target=pictures", update("picturePanel")); 其中,update函数即为柯里化的一个实例,它会返回一个函数,即: update("newsPanel") = function(text){ $("div#newsPanel").html(text); }
由于update(“newsPanel”)的返回值为一个函数,需要的参数为一个字符串,因此在refresh的Ajax调用中,当success时,会给callback传入服务器端返回的数据信息,从而实现newsPanel面板的刷新,其他的文章面板articlePanel,图片面板picturePanel的刷新均采取这种方式,这样,代码的可读性,可维护性均得到了提高。
相关文章推荐
- js图片轮播可控制是否循环轮播,点击左右按钮切换
- JS 开发过程中遇到的常见问题
- 抽奖转盘
- 视频切换JS
- JS循环遍历JSON数组
- 常用的JavaScript代码
- ios中safari不兼容JavaScript中Date转化为时间戳的问题
- SyntaxError: JSON.parse: bad control character in string literal at line 1 column 16 of the JSON data
- JSP中EL表达式的比较符号、字符串比较
- JMeter中对于Json数据的处理方法
- JavaScript学习笔记二十六:AJAX
- 【转】【three.js详解之一】入门篇
- 最全面的65条最常用正则表达式
- js动态添加table,select等
- JavaScript中match方法与exec方法的异同
- JavaScript:DOM扩展
- (JS错误)document对象操作,获取对象的错误
- Gson and Json
- ajax总结
- 理解js闭包