Get to know MDN better
Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since septiembre de 2016.
Una expresión de función flecha es una alternativa compacta a una expresión de función tradicional, pero es limitada y no se puede utilizar en todas las situaciones.
Diferencias y limitaciones:
Observa, paso a paso, la descomposición de una "función tradicional" hasta la "función flecha" más simple: Nota: Cada paso a lo largo del camino es una "función flecha" válida
Nota: Como se muestra arriba, los { corchetes }, ( paréntesis ) y "return" son opcionales, pero pueden ser obligatorios.
Por ejemplo, si tienes varios argumentos o ningún argumento, deberás volver a introducir paréntesis alrededor de los argumentos:
Del mismo modo, si el cuerpo requiere líneas de procesamiento adicionales, deberás volver a introducir los corchetes Más el "return" (las funciones flecha no adivinan mágicamente qué o cuándo quieres "volver"):
Y finalmente, en las funciones con nombre tratamos las expresiones de flecha como variables
Un parámetro. Con una expresión simple no se necesita return:
Varios parámetros requieren paréntesis. Con una expresión simple no se necesita return:
Las declaraciones de varias líneas requieren corchetes y return:
Varios parámetros requieren paréntesis. Las declaraciones de varias líneas requieren corchetes y return:
Para devolver una expresión de objeto literal, se requieren paréntesis alrededor de la expresión:
Los parámetros rest son compatibles:
Se admiten los parámetros predeterminados:
Desestructuración dentro de los parámetros admitidos:
Consulta también "ES6 en profundidad: funciones flecha" en hacks.mozilla.org.
Una de las razones por las que se introdujeron las funciones flecha fue para eliminar complejidades del ámbito (this) y hacer que la ejecución de funciones sea mucho más intuitiva.
Nota: Si this es un misterio para ti, consulta este documento para obtener más información sobre cómo funciona this. Para resumir, this se refiere a la instancia. Las instancias se crean cuando se invoca la palabra clave new. De lo contrario, this se establecerá —de forma predeterminada— en el ámbito o alcance de window.
En las funciones tradicionales de manera predeterminada this está en el ámbito de window:
Las funciones flecha no predeterminan this al ámbito o alcance de window, más bien se ejecutan en el ámbito o alcance en que se crean:
En el ejemplo anterior, la función flecha no tiene su propio this. Se utiliza el valor this del ámbito léxico adjunto; las funciones flecha siguen las reglas normales de búsqueda de variables. Entonces, mientras busca this que no está presente en el ámbito actual, una función flecha termina encontrando el this de su ámbito adjunto.
Dado que this proviene del contexto léxico circundante, en el modo estricto se ignoran las reglas con respecto a this.
Todas las demás reglas del modo estricto se aplican normalmente.
Advertencia: Comprueba las notas sobre el modo estricto.
Como se indicó anteriormente, las expresiones de función flecha son más adecuadas para funciones que no son métodos. Observa qué sucede cuando intentas usarlas como métodos:
Las funciones flecha no tienen su propio this. Otro ejemplo que involucra Object.defineProperty():
Los métodos call, apply y bind NO son adecuados para las funciones flecha, ya que fueron diseñados para permitir que los métodos se ejecuten dentro de diferentes ámbitos, porque las funciones flecha establecen "this" según el ámbito dentro del cual se define la función flecha.
Por ejemplo, call, apply y bind funcionan como se esperaba con las funciones tradicionales, porque establecen el ámbito para cada uno de los métodos:
Con las funciones flecha, dado que la función add esencialmente se crea en el ámbito del window (global), asumirá que this es window.
Quizás el mayor beneficio de usar las funciones flecha es con los métodos a nivel del DOM (setTimeout, setInterval, addEventListener) que generalmente requieren algún tipo de cierre, llamada, aplicación o vinculación para garantizar que la función se ejecute en el ámbito adecuado.
Ejemplo tradicional:
Ejemplo de flecha:
Las funciones flecha no tienen su propio objeto arguments. Por tanto, en este ejemplo, arguments simplemente es una referencia a los argumentos del ámbito adjunto:
En la mayoría de los casos, usar parámetros rest es una buena alternativa a usar un objeto arguments.
Las funciones flecha no se pueden usar como constructores y arrojarán un error cuando se usen con new.
Las funciones flecha no tienen una propiedad prototype.
La palabra clave yield no se puede utilizar en el cuerpo de una función flecha (excepto cuando está permitido dentro de las funciones anidadas dentro de ella). Como consecuencia, las funciones flecha no se pueden utilizar como generadores.
Las funciones flecha pueden tener un "cuerpo conciso" o el "cuerpo de bloque" habitual.
En un cuerpo conciso, solo se especifica una expresión, que se convierte en el valor de retorno implícito. En el cuerpo de un bloque, debes utilizar una instrucción return explícita.
Ten en cuenta que devolver objetos literales utilizando la sintaxis de cuerpo conciso params => {object: literal} no funcionará como se esperaba.
Esto se debe a que el código entre llaves ({}) se procesa como una secuencia de declaraciones (es decir, foo se trata como una etiqueta, no como una clave en un objeto literal).
Debes envolver el objeto literal entre paréntesis:
Una función flecha no puede contener un salto de línea entre sus parámetros y su flecha.
Sin embargo, esto se puede modificar colocando el salto de línea después de la flecha o usando paréntesis/llaves como se ve a continuación para garantizar que el código se mantenga bonito y esponjoso. También puedes poner saltos de línea entre argumentos.
Aunque la flecha en una función flecha no es un operador, las funciones flecha tienen reglas de procesamiento especiales que interactúan de manera diferente con prioridad de operadores en comparación con las funciones regulares.
| ECMAScript® 2027 Language Specification # sec-arrow-function-definitions |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 11 feb 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.