everycode
everycode copied to clipboard
2014年12月22日 D4
创建一个函数,将传入的数字相加,支持链式调用。
function add(n){
// param Number
}
add(1) // 1
我们也可以多次链式调用
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
也要支持,存储和重用。
var addTwo = add(2);
addTwo // 2
addTwo(3) // 5
addTwo(3)(5) // 13
此函数add 每定义次只能使用一次!
var add = (function(){
var r = 0;
return function p(n){
r += n;
p.toString = function() {
return r;
};
return p;
}
})();
再来一发 改进后的 可以多次用的函数
function add(m) {
var r = m;
function p(n) {
r += n;
return p;
}
p.valueOf = function () {
return r;
};
return p;
}
add(1); // 1
add(1)(2); // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
function add(n) {
function counter(m) {
n += m;
return counter;
};
counter.toString = counter.valueOf = function () {return n}
return counter;
}
// 测试用例
console.log(add(1)(2)(3)); // 6
console.log(add(1)(2)(3)(4)); // 10
console.log(add(1)(2)(3)(4)(5)); // 15
var addTwo = add(2);
console.log(addTwo) // 2
console.log(addTwo(3)) // 5
console.log(addTwo(3)(5)) // 13
function add(n){
sum=n;
add=function(m){
sum+=m;
return add;
};
add.toString=add.valueOf=function(){return sum};
return add;
}
function add(n){
function helper(a,b){
var sum=a+b;
var s=helper.bind(null,sum);
s.valueOf=s.toSrting=function(){
return sum;
}
return s;
}
return helper(n,0);
}
console.log(+add(1)(2)(3)); // 6
console.log(+add(1)(2)(3)(4)); //10
console.log(+add(1)(2)(3)(4)(5)); // 15
var addTwo = add(2); // 2
addTwo(3); // 5
addTwo(3)(5); // 13