Saltar al contenido

¿Cómo funciona Math.max.apply ()?

Solución:

apply acepta una matriz y aplica la matriz como parámetros a la función real. Entonces,

Math.max.apply(Math, list);

puede entenderse como,

Math.max("12", "23", "100", "34", "56", "9", "233");

Entonces, apply es una forma conveniente de pasar una matriz de datos como parámetros a una función. Recordar

console.log(Math.max(list));   # NaN

no funcionará, porque max no acepta una matriz como entrada.

Hay otra ventaja de usar apply, puede elegir su propio contexto. El primer parámetro, pasas a apply de cualquier función, será el this dentro de esa función. Pero, max no depende del contexto actual. Entonces, cualquier cosa funcionaría en lugar de Math.

console.log(Math.max.apply(undefined, list));   # 233
console.log(Math.max.apply(null, list));        # 233
console.log(Math.max.apply(Math, list));        # 233

Ya que apply está realmente definido en Function.prototype, cualquier objeto de función JavaScript válido, tendrá apply función, por defecto.

En JavaScript ES6, simplemente use el operador Spread:

var list = ["12","23","100","34","56","9","233"];
console.log(Math.max(...list));
//                   ^^^ Spread operator 

¿Alguien puede decirme cómo funciona el siguiente código?

Math.max.apply(Math,list)

Invoca un Math.max funcionar con Math objeto que se utilizará como this referencia en la implementación de la función (cuerpo) y list para pasar como argumentos.

Entonces esto eventualmente equivale a

Math.max("12","23","100","34","56", "9","233")

Parece que funciona si paso null o Math.

Obviamente Math.max la implementación no usa la variable de instancia, no hay razón para hacerlo. La implementación nativa simplemente iteraría sobre arguments y encuentra el máximo.

¿Todas las funciones nativas / definidas por el usuario tienen un método de llamada y aplicación que podemos usar?

Sí, todas las funciones se pueden invocar usando call o apply

Referencias:

  • MDN .apply() documentación (créditos a @RGraham)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *