js柯里化
2016-05-03 16:26
344 查看
今天一个不小心在书上又看到了
但是呢,我会从js设计模式这本书中,取一段柯里化代码片断,加上详细的注释。如果Google柯里化后,还是不懂的同学,可以读读这段注释
当然,我推荐你先运行一遍,再去看注释
代码中注释出于本博客 http://blog.csdn.net/jiestyle21,如果理解有误的地方,请指出。
函数柯里化温故而知新,也顺便再记一笔。这里不介绍什么是柯里化函数。如果不懂的请自行Google。
但是呢,我会从js设计模式这本书中,取一段柯里化代码片断,加上详细的注释。如果Google柯里化后,还是不懂的同学,可以读读这段注释
当然,我推荐你先运行一遍,再去看注释
var currying = function(fn) { //这里保存每次的开销 var args = []; return function() { //如果传入的参数长度为0,也就是没有传参的情况下,其实就是告诉程序,我要/求总开销了 if (arguments.length === 0) { //将fn在这块上下文中执行,并且把每天的开销当做参数传入 return fn.apply(this, args); //有参数传入的话,就说明还在记录每天的开销,并没有要/求总开销 } else { //arguments请自行google,它是一个对象并不是一个数组。 //将arguments转为数组后push到args //也就是收到每天的开销后,保存到args中 [].push.apply(args, arguments); //把这块上下文再次return出去 return arguments.callee; } } }; var cost = (function() { //典型的闭包,将money保存起来 var money = 0; //这里就是currying(fn)中的fn return function() { //arguments其实就是currying中的args //收到了求总开销的命令,下面是真正计算总开销的地方 for (var i = 0, l = arguments.length; i < l; i++) { money += arguments[i]; } return money; } })(); var cost = currying(cost); // 转化成currying 函数 cost(100); // 未真正求值 cost(200); // 未真正求值 cost(300); // 未真正求值 cost(200); // 未真正求值 cost(200); // 未真正求值 cost(50); // 未真正求值 cost(100); // 未真正求值 alert(cost()); // 求值并输出:600
代码中注释出于本博客 http://blog.csdn.net/jiestyle21,如果理解有误的地方,请指出。
相关文章推荐
- javascript实现用户名是否存在的实时提醒
- javascript 如何重载原生api的功能
- 总结JavaScript三种数据存储方式之间的区别
- JSTL 字符串长度判断并截取
- jstl 格式化时间日期标签讲解
- JSTL函数标签库 fn标签
- javascript拷贝
- Javascript学习笔记(10)
- js 按钮下一个上一个滚动效果
- js源码封装ajax;
- js实现简易的贪吃蛇
- 10个顶级Web移动开发JavaScript框架
- js中国地名数据
- jsp页面添加分页
- JavaScript 深入浅出 2 运算符与表达式
- js对输入文字个数的限制...
- JS根据设备宽度设置根节点(html)font-size字体大小
- javascript
- 常见js dom等原生示例
- 简单记录jsp