a+b+c
を返す必要が怒鳴る形式
add(a,b,c)
add(a)(b)(c)
add(a)(b,c)
add(a,b)(c)
をサポートする必要がありAdd
を言わせてJavaScriptで機能を実装したい
で起動します。出来ますか?もしそうなら、どのように?
a+b+c
を返す必要が怒鳴る形式
add(a,b,c)
add(a)(b)(c)
add(a)(b,c)
add(a,b)(c)
をサポートする必要がありAdd
を言わせてJavaScriptで機能を実装したい
で起動します。出来ますか?もしそうなら、どのように?
ような何かを行うことができます。配列の長さが3以上の場合は、Array#reduceを使用して最初の3つの数値を合計します。そうでない場合は、関数を返します。
function add() {
var args = []; // collect the arguments
function innerAdd() {
args.push.apply(args, arguments); // add the arguments to args
// if the length of args is under 3 return innerAdd, if not sum the first 3 numers
return args.length < 3 ? innerAdd : args.slice(0, 3).reduce(function(s, n) {
return s + n;
});
}
return innerAdd.apply(null, arguments); // invoke innerAdd with current arguments
}
var a = 1, b = 2, c = 3;
console.log(add(a,b,c));
console.log(add(a)(b)(c));
console.log(add(a)(b,c));
console.log(add(a,b)(c));
機能が実行されるたびにあなたは配列にarguments objectパラメータを収集し、それは長さですチェック
function add(){
let sum = 0;
for(let e of arguments) sum += e;
let ret = add.bind(null, sum);
ret.toString =() => sum;
ret.valueOf =() => sum;
return ret;
}
let x = +add(2, 3)(4)(11)
console.log(x, typeof x);
それはあなたがそれが機能を返す 'arguments'オブジェクト –