No entiendo qué es la devolución de llamada en este ejemplo, especialmente la línea newArray.push(callback(this[i])); tal como lo obtuve (este [i]) es un elemento de Array, pero ¿cómo se refiere CALLBACK al código?
const s = [23, 65, 98, 5]; Array.prototype.myMap = function(callback) { const newArray = []; for(let i=0;i<this.length;i++){ newArray.push(callback(this[i])); } return newArray; }; const new_s = s.myMap(function(item) { return item * 2; }); console.log(new_s);1. Conceptos de fondo
En primer lugar, esta parte superior es solo una definición de función donde 'devolución de llamada' es solo un parámetro que myMap puede aceptar. La palabra 'devolución de llamada' no es especial y, de hecho, puede usar cualquier nombre, pero 'devolución de llamada' indica que en la definición de su función le está pidiendo a la persona que llama que proporcione una función en lugar de un número entero o una cadena. Es decir, también podrías escribir algo como esto:
Array.prototype.myMap = function(param) { // you can console.log(param) and you would see the parameter in log. }Y en teoría, podría llamar a esta función haciendo:
s.myMap(1) // the log will show 1 s.myMap("hello") // the log will show "hello" s.myMap(function() {}) // the log will show [Parameter is a Function]En segundo lugar, si nombra su parámetro 'devolución de llamada', le indica a la persona que llama que, de hecho, podría pasar una función a este myMap, no solo un número entero o una cadena, por lo que cuando escribe algo como esto:
Array.prototype.myMap = function(callback_f) { callback_f(); // <----- call the incoming function passed as a param }Luego, la persona que llama tiene la idea de que debe proporcionar una función en myMap, ya sea de esta manera:
s.MyMap(function() { // do some stuff })O de esta manera:
function doStuff() {} s.MyMap(doStuff)De cualquier manera, se espera que el parámetro callback_f sea una función en este caso, y myMap llamará y ejecutará esta función, independientemente de lo que le pases.
2. Respondiendo a tu pregunta
Como ya sabrá, esta es una definición de función especial porque, al hacer Array.prototype.myMap, está modificando cómo funcionan todas las matrices y todas las matrices ahora obtendrán esta definición de función myMap.
En segundo lugar, puede llamar a esta función haciendo s.myMap() si s es cualquier matriz.
Así que en tu caso, la línea:
newArray.push(callback(this[i]))también podría escribirse como:
let result_of_executing_the_callback = callback(this[i]) newArray.push(result_of_executing_the_callback)lo que significa: primero, ejecute la función de devolución de llamada entrante en esto (= matriz actual) en el índice i. ¿Y cuál es la función de devolución de llamada entrante? Es la función f que estás pasando cuando haces s.MyMap(f):
En tu caso f es esto:
function(item) { return item * 2; }imagen de f siendo pasada a su función como el parámetro 'devolución de llamada'
(Si esto es útil, márquelo como aceptado).