/ / función parcial de javascript, argumentos - javascript

Función parcial de javascript, argumentos - javascript

Estoy tratando de entender funciones parciales. Encontré este ejemplo (http://blog.thesoftwarecraft.com/2013/05/partial-functions-in-javascript.html) y soy incapaz de entender completamente.

function partial(f) {
console.log(f) // tip(p,check)
var args = Array.prototype.slice.call(arguments, 1); //0.2

var test_args = Array.prototype.slice.call(arguments);
console.warn(test_args) // [tip(p,check), 0.2]

return function () {
console.warn(arguments) //[120, 0, [120, 90, 180]] [90, 0, [120, 90, 180]] ...
//where do these arguments come from? why don"t appear at test_args?

var other_args = Array.prototype.slice.call(arguments); //[120, 0, [120, 90, 180]] [90, 0, [120, 90, 180]] ...

console.log(args.concat(other_args)) // added percentage to array[0.2, 120, 0, [120, 90, 180]]

return f.apply(null, args.concat(other_args)); //we execute tip with all the arguments (only 2 first will be used)
}
}

function tip(percentage, check) {
return check * percentage
}

[120, 90, 180].map(partial(tip, 0.2)); //[24, 18, 36]

Respuestas

0 para la respuesta № 1
return function () {
console.warn(arguments) //[120, 0, [120, 90, 180]] [90, 0, [120, 90, 180]] ...

¿De dónde vienen estos argumentos? ¿Por qué no aparece en test_args?

Porque es una función nueva, la que se devuelve, que tiene una nueva arguments objeto. Puedes consultar aquí:

var tipper = partial(tip,0.2);
[120, 90, 180].map(function(el) {
console.log(arguments); // here they are!
return tipper(el);
});

1 para la respuesta № 2

En la teoría de los lenguajes de programación esto se conoce como aplicación parcial. Básicamente toma su función que requiere. norte argumentos y n-k Argumentos y devuelve una función que tiene k argumentos mediante la aplicación parcial de estos previstos n-k argumentos

Toma este ejemplo en un pseudo código

function mul(x, y)
return x*y

function mul2
return mul(2)

var a = f(1,2); // 3
var b = mul2(4); // 8

Aunque la función toma 2 argumentos (norte), puede hacer otra función fuera de ella aplicando solo 1 argumento (n-k). La nueva función solo requerirá un argumento (k)

Tu partial tiene una función y su arguments. Almacena estos argumentos en el args variable. Luego devuelve la función interna que toma sus argumentos, pero como tiene que combinar el n-k argumentos de la función de nivel superior con k Argumentos de la función interna, tienes. concat y la lista completa se pasa a la función original.

Edit: como señala Andreas en el comentario, esto no se llama zurra. El resto de la respuesta aún se mantiene.