一:JS中的toString()和valueOf()
参考链接文章:
JavaScript中toString()和valueOf()
function fn() {
return 20;
}
console.log(fn + 10); // 输出结果是多少?
复制代码
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
console.log(fn + 10); //20
复制代码
function fn() {
return 20;
}
fn.toString = function() {
return 10;
}
fn.valueOf = function() {
return 5;
}
console.log(fn + 10); // 15复制代码
二:柯里化
function add(){
var args = [].slice.call(arguments);
var fn = function(){
var newArgs = args.concat([].slice.call(arguments));
return add.apply(null,newArgs);
}
fn.toString = function(){
return args.reduce(function(a, b) {
return a + b;
})
}
return fn ;
}
add(1)(2,3) //6
add(1)(2)(3)(4)(5) //15复制代码
var currying = function(fn) {
var args = [].slice.call(arguments, 1);
return function() {
// 主要还是收集所有需要的参数到一个数组中,便于统一计算
var _args = args.concat([].slice.call(arguments));
return fn.apply(null, _args);
}
}
var sum = currying(function() {
var args = [].slice.call(arguments);
return args.reduce(function(a, b) {
return a + b;
})
}, 10)
console.log(sum(20, 10)); // 40
console.log(sum(10, 5)); // 25
复制代码