Как я могу достичь этих сценариев с помощью функции currying?
add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)
Я прочитал так много блогов, что не смог найти такой сценарий. может кто-то мне помочь в этом.
Что-то вроде этого?
var total = 0;
function add(){
// Add up every argument received
for (var i in arguments)
total += arguments[i];
return add;
}
add(3,4)(3);
console.log(total);
add(3)(4)(3);
console.log(total);
add(3)(4,3);
console.log(total);
Если вы не хотите, чтобы функция зависела от глобальной переменной, сохраните значение как атрибут функции add
вместо
function add(){
// Add up every argument received
for (var i in arguments)
add.total += arguments[i];
return add;
}
add.total = 0;
add.toString = function(){
var total = add.total;
add.total = 0;
return total;
};
var sum1 = add(3,4)(3);
alert( sum1 );
var sum2 = add(3)(4)(3);
alert( sum2 );
var sum3 = add(3)(4,3);
alert( sum3 );
Здесь я вижу два сценария:
1.
add(3,4)(3)
add(3)(4,3)
а также
2.
add(3)(4)(3)
Первый, с которым вы можете обратиться:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return args1.concat(args2).reduce(function(a, i) { return a + i });
}
}
Второй:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return function() {
const args3 = Array.prototype.slice.call(arguments);
return args1.concat(args2).concat(args3).reduce(function(a, i) { return a + i });
}
}
}
Я не нашел решения, чтобы иметь функцию, которая работает одновременно.