w3schools una tutorial tipos pasar parametros lista funciones funcion es6 ejemplo desde javascript ecmascript-6 keyword-argument

una - prompt javascript ejemplo



¿Nombres de parámetros con ES6? (4)

Al ver que el valor del parámetro predeterminado solo se usa cuando el parámetro no está definido, la única forma de "omitir" un parámetro y volver a la configuración predeterminada sería enviar undefined en su lugar:

call_api(''/api/clients/new'', function(x){console.log(x)}, undefined, {1:2})

Ejemplo: Babel REPL

El valor de la query dentro de la función será {} (o lo que sea que configure de manera predeterminada) en este caso.

Esto sería algo similar a lo que hace Visual Basic cuando quiere usar el valor de parámetro predeterminado pasando un valor vacío. (por ejemplo, sub name(argument 1, , , argument 4) )

De lo contrario, si desea soporte para los parámetros con nombre, el mejor compromiso sería la respuesta proporcionada por @Benjamin Gruenbaum.

Actualización: es posible que este artículo brinde una opción con la palabra clave arguments o, mejor aún, que pueda iterar sobre la colección ES6 ...rest parameters para simular una función sobrecargada en Javascript.

He definido una función como:

function call_api(url, callback, query = {}, body = {})

Esperaba una sintaxis en la que pudiera proporcionar cuerpo y omitir la consulta:

call_api(''/api/clients/new'', function(x){console.log(x)}, body={1:2})

Pero tengo que usar esta solución:

call_api(''/api/clients/new'', function(x){console.log(x)}, {}, {1:2})

Incluso si proporciono body= , parece que aparece como el parámetro de query . Yo uso Babel con Webpack. Probé la sintaxis en la consola de Chrome y en el código fuente de Webpack.

¿Es compatible tal sintaxis con ES6? ¿Como funciona?


Como se muestra en este sitio , los valores predeterminados son solo para los parámetros que necesitan un valor predeterminado (como un parámetro de opciones), pero no para los parámetros de ''omisión''.

Lo que estás tratando de hacer es

// function definition function hi(a,b,c,d) // function call hi(a,b,d)

ES6 todavía va a pensar que su ''d'', es la c definida, independientemente de su valor predeterminado.
Entonces, no, ES6 no tiene esa sintaxis.


No puede especificar a qué parámetro asigna en su llamada.

call_api(''/api/clients/new'', function(x){console.log(x)}, body={1:2})

Es equivalente a establecer una variable llamada cuerpo fuera de la función y luego pasar su valor en el punto del parámetro de consulta.

Sin embargo, podrías usar la desestructuración para lograr lo que quieres.

function call_api(url, callback, {query = {}, body = {}} = {})

Entonces en tu llamada harías esto

call_api(''/api/clients/new'', function(x){console.log(x)}, {body:{1:2}})


Recomiendo que se solucione esto pasando un objeto y utilizando la desestructuración de objetos:

function callApi({url, callback, query = {}, body = {}})

Y luego llámalo como:

callAPI({url: "/api/..", callback: (x => console.log(x)), body: {a:2}})

Lo cual le daría una sintaxis similar a la que desea.

Los argumentos con nombre se han considerado y rechazado para JavaScript, a diferencia de otros lenguajes como C # y Python, que los usan. Aquí hay una discusión reciente sobre esto desde la lista de correo del idioma.