javascript - learn - script java
FunciĆ³n de cola en javascript (2)
Puedes usar el .valueOf
para hacer el truco:
function myfunction(sum){
var accum = function(val) {
sum += val;
return accum;
};
accum.valueOf = function() {
return sum;
};
return accum(0);
};
var total = myfunction(1)(2)(3)(4);
console.log(total); // 10
JSFiddle: http://jsfiddle.net/vdkwhxrL/
Cómo funciona:
en cada iteración, devuelve una referencia a la función del acumulador. Pero cuando solicita el resultado, se invoca .valueOf()
, que en su lugar devuelve un valor escalar.
Tenga en cuenta que el resultado sigue siendo una función. Lo más importante es que no se copia en la tarea:
var copy = total
var trueCopy = +total // explicit conversion to number
console.log(copy) // 10 ; so far so good
console.log(typeof copy) // function
console.log(trueCopy) // 10
console.log(typeof trueCopy) // number
console.log(total(5)) // 15
console.log(copy) // 15 too!
console.log(trueCopy) // 10
Esta pregunta ya tiene una respuesta aquí:
- Función de curried suma variable 7 respuestas
Quiero hacer una función que agregue argumentos. Invocando esta función debería ser
functionAdd(2)(3)(4)...(n);
Y el resultado 2 + 3 + 4 ... + n Estoy intentando esto
function myfunction(num){
var summ =+ num;
if(num !== undefined){
return myfunction(summ);
}
};
Pero no funciona, un error de ovwerflow. Y no entiendo dónde debería salir de esta función;
Si la última llamada puede ser sin argumentos:
function add(value) {
var sum = value;
return function add(value) {
if(typeof value === ''number'') {
sum += value
return add
} else {
return sum
}
}
}
console.log(add(1)(2)(3)(0)()) // 6