2012-06-16 20 views
6

Estoy aprendiendo javascript. Sé que podemos pasar una función a otras funciones después de que se define la función. Pero necesito ayuda para entender este ejemplo:javascript: pasar funciones

function map(func, array) { 
    var result = []; 
    forEach(array, function (element) { 
    result.push(func(element)); 
    }); 
    return result; 
} 

Según lo que puedo entender, func es un argumento de mapa. Necesito proporcionar una función como func. Pero en el tutorial que estoy leyendo, no menciona de dónde viene este func, parece que no es necesario especificar este argumento. Otro ejemplo en el tutorial es el mismo:

function count(test, array) { 
    return reduce(function(total, element) { 
    return total + (test(element) ? 1 : 0); 
    }, 0, array); 
} 

¿Esta función de prueba es igual al elemento === 0? 1: 0, pero el tutorial no dice que necesito escribir la función de prueba. ¿Debo escribir esta función de prueba?

+0

¿Dónde están los tutoriales? –

+0

Tal vez sea [w3schools] (http://www.w3schools.com/). –

+0

http://eloquentjavascript.net/chapter6.html#p31aabc64 – Jenny

Respuesta

4

EDIT: En el enlace al tutorial informados, la función pasada es una función predefinida Math.round. Mi ejemplo a continuación muestra cómo crear tu propia función para aprobar.


El ejemplo map muestra la implementación. Debería proporcionar la función (y la matriz) cuando llame al map.

Por lo que parece, el map pasa el elemento actual en la matriz a su función, y su función debe hacer algo con ella y devolver el resultado. Los resultados que devuelve tu función se agregan a la nueva matriz.

var arr = [1,2,3,4,5]; 
var my_func = function(item) { return item * 2; }; 

var new_arr = map(my_func, arr); 

console.log(new_arr); // [2,4,6,8,10] 
  1. hemos creado una matriz (arr),

  2. creamos una función (my_func), que tiene todo lo que se le da, y lo multiplica por 2.

  3. pasamos ambos a map

  4. la función map itera nuestro arr, pasando el elemento actual en cada iteración a nuestra función.

  5. nuestra función toma el elemento actual y devuelve el resultado de multiplicar por 2.

  6. la función map detiene sin resultado, y lo añade a la nueva matriz.

  7. cuando se realiza la iteración, la función map devuelve la nueva matriz.

+0

Gracias por ayudarme. Después de leer tu respuesta, descubrí que los iguales son la prueba de función. – Jenny

0

Al llamar al mapa, usted pasa una función en línea, o una función existente.

// The following would return [2,3,4] 
map(function(item) { return item + 1}, [1,2,3]); 

function double(item) {return item*2} 
map(double, [1,2,3]) 
// returns [2,4,6] 

// Your example, Math.round 
map(Math.round, [0.01, 2, 9.89, Math.PI]) 
// returns [0,2,10,3] 

Otra forma de decirlo es que una función se puede pasar a otra función como cualquier otro argumento.Esto está en la misma línea en que una función es como cualquier otra variable que se puede pasar o devolver desde una función

function createAdder(toAdd) { 
    return function (num) { 
     return num + toAdd; 
    } 
} 

var add5 = createAdder(5); 
add5(2); // returns 7 


var add7 = createAdder(7); 
add7(-2); // returns 5 
Cuestiones relacionadas