var add = function(a, b) { return a + b;};Function.method('curry', function() {
var slice = Array.prototype.slice,
args = slice.apply(arguments),
that = this;
return function() {
return that.apply(null, args.concat(slice.apply(arguments)));
};
});
var add1 = add.curry(1);
add1(6); //结果是7
结果是7,什么意思呀,看不懂
var slice = Array.prototype.slice,
args = slice.apply(arguments),
that = this;
return function() {
return that.apply(null, args.concat(slice.apply(arguments)));
};
});
var add1 = add.curry(1);
add1(6); //结果是7
结果是7,什么意思呀,看不懂
解决方案 »
- 如何隐藏一个单元格的显示.
- 如何根据对象表单名称,取得名称对应的变量?谢
- 为什么这滚动小图片在IE9以上版本 显示不一样呢
- Extjs4表尾分层自定义显示汇总数据
- 如何动态改变单元格的背景色,或前景色?
- 点超链接,执行本机的exe文件,但不要出现询问是下载还是打开
- 高手吃分.来吧.................勇敢的来吧.......
- 急急急急急急急;;;js+html+css来实现使用键盘上的左右上下键来选中页面上的图片
- 一个网页先清除再显示的问题
- 有没有组件,可以让pdf文档在网页上展现出来,并且可以编辑。
- 全局下定义var i与window.i真的差好多啊
- 求JS怎么获取Iframe里面的元素
这里是给所有函数加'curry' method,第二个参数就是添加的函数体
1.slice函数
此方法在数组的prototype上,可提取字符串的某个部分,并以新的字符串返回被提取的部分。如果没有参数,则相当于复制一个数组。(貌似两维数组无法复制)
2.apply函数
此方法在Function的prototype上,用于动态执行某个函数。他有两个参数,第一个用于指定执行函数的对象,第二个是数组类型,用于指定函数的参数
比如
function add(a, b) {
return a + b;
}
alert(add.apply(null, [1, 2]));
将会返回3好了,回到你的代码
// 定义函数
var add = function(a, b) { return a + b;};Function.method('curry', function() {
// 得到slice函数
var slice = Array.prototype.slice,
// 复制curry的参数数组
args = slice.apply(arguments),
// 得到function对象的引用(这里指的是add)
that = this;
return function() {
// slice.apply(arguments)得到add1的参数数组
// args.concat(slice.apply(arguments)); 将add和add1的参数组成一个新的数组([1, 6])
// that.apply(null, args.concat(slice.apply(arguments))) 1+6
return that.apply(null, args.concat(slice.apply(arguments)));
};
}); // 这段执行到return了一个function
var add1 = add.curry(1);
// 这句话执行了function里面的内容
add1(6); //结果是7
在执行add.curry(1);的时候,生成了一个闭包
而args和that被记录在闭包里。