¿Cómo paso una función como parámetro sin que la función se ejecute en la función "principal" o se use eval()
? (Desde que leí que es inseguro).
Tengo esto:
addContact(entityId, refreshContactList());
Funciona, pero el problema es que se refreshContactList
dispara cuando se llama a la función, en lugar de cuando se usa en la función.
Podría eval()
evitarlo usando , pero no es la mejor práctica, según lo que he leído. ¿Cómo puedo pasar una función como parámetro en JavaScript?
javascript
function
parameters
imperium2335
fuente
fuente
addContact(1, function(id) { console.log(id); });
=
signo ... enclass myFuncs {
lugar declass myFuncs = {
. También necesitaría ejecutarse en un entorno que admitiera la sintaxis de la clase (no todos los navegadores lo admiten todavía). Si todavía tiene dificultades, podría ser más adecuado para una pregunta completamente nueva, ya que su problema no es sobre pasar funciones, es la sintaxis general de ES.Si desea pasar una función, simplemente haga referencia a ella por su nombre sin los paréntesis:
Pero a veces es posible que desee pasar una función con argumentos incluidos , pero que no se llame hasta que se invoque la devolución de llamada. Para hacer esto, cuando lo llame, simplemente envuélvalo en una función anónima, como esta:
Si lo prefiere, también puede usar la función de aplicación y tener un tercer parámetro que es una matriz de argumentos, como los siguientes:
fuente
Ejemplo 1:
Ejemplo 2
mira esto
fuente
Para pasar la función como parámetro, simplemente elimine los corchetes.
La idea detrás de esto es que una función es bastante similar a una variable. En lugar de escribir
bien podrías escribir
Hay diferencias menores entre los dos, pero de todos modos, ambos son formas válidas de definir una función. Ahora, si define una función y la asigna explícitamente a una variable, parece bastante lógico que pueda pasarla como parámetro a otra función y no necesite corchetes:
fuente
typeof paramFunc == "function"
es suficiente, porque si no es invocable, puede ignorarlo.Hay una frase entre los programadores de JavaScript: "Eval is Evil", ¡así que trata de evitarlo a toda costa!
Además de la respuesta de Steve Fenton, también puede pasar funciones directamente.
fuente
Me corté todo el cabello con ese problema. No pude hacer que los ejemplos anteriores funcionaran, así que terminé como:
Y eso funciona a las mil maravillas ... al menos para lo que necesitaba. Espero que pueda ayudar a algunos.
fuente
Sugiero poner los parámetros en una matriz y luego dividirlos usando la
.apply()
función. Así que ahora podemos pasar fácilmente una función con muchos parámetros y ejecutarla de una manera simple.fuente
También puedes usar
eval()
para hacer lo mismo.Eso es. También estaba buscando esta solución y probé soluciones proporcionadas en otras respuestas, pero finalmente conseguí que funcionara con el ejemplo anterior.
fuente
Aquí hay otro enfoque:
fuente
De hecho, parece un poco complicado, no lo es.
obtener método como parámetro:
Puedes dar como método de parámetro:
fuente
Las otras respuestas hacen un excelente trabajo al describir lo que está sucediendo, pero un "problema" importante es asegurarse de que lo que sea que pase sea una referencia a una función.
Por ejemplo, si pasa a través de una cadena en lugar de una función, obtendrá un error:
Ver JsFiddle
fuente
En algún momento, cuando necesite lidiar con el controlador de eventos, también debe pasar el evento como argumento, la mayoría de la biblioteca moderna, como reaccionar, angular, podría necesitar esto.
Necesito anular la función OnSubmit (función de la biblioteca de terceros) con alguna validación personalizada en reactjs y pasé la función y el evento tanto como a continuación
ORIGINALMENTE
HECHO UNA NUEVA FUNCIÓN
upload
y llamado pasadoonSubmit
y evento como argumentosfuente
También puede usar un JSON para almacenar y enviar funciones JS.
Verifique lo siguiente:
Esto imprimirá 'a'.
Lo siguiente tiene el mismo efecto con lo anterior:
Lo que también tiene el mismo efecto con lo siguiente:
Y un paradigma de objeto que usa Class como objeto prototipo:
fuente