Los dos fragmentos siguientes imprimen "flecha". Me gustaría saber por qué. ¿Las funciones de flecha tienen una especie de prioridad más alta que las funciones normales si ambas tienen el mismo nombre?
function increment(){
alert("normal")
}
var increment = () => {
alert("arrow")
}
increment(); //prints arrow
var increment = () => {
alert("arrow")
}
function increment(){
alert("normal")
}
increment(); //prints arrow
javascript
Neón
fuente
fuente
Respuestas:
Esto no tiene nada que ver con las funciones de flecha. Por el contrario, las funciones regulares (y
var
declaraciones) son izadas ; independientemente de dónde los escriba, se moverán a la parte superior de su alcance. Efectivamente, ambos ejemplos de código son completamente idénticos, y se ven así:La parte de asignación de
var increment = ...
ocurre después de la función izada y lavar
declaración, en ambos casos. Independientemente de dónde escribió realmente lafunction increment() { }
declaración, se eleva por encima de la línea que realiza la asignación a laincrement
variable.Es por eso que el siguiente código aún funciona, a pesar de que la función aparentemente se define después de ser utilizada:
Si desea comparar like con like, debe comparar
var increment = () => { ... }
convar increment = function () { ... }
, es decir, dos tareas. Los resultados se ven así:vs
En ambos casos, hay una sola
var increment;
declaración de izado , y luego las asignaciones ocurren en el orden en que están escritas, lo que significa que gana la última asignación.Por otro lado, esta es una de las principales razones para preferir
let x = () => { }
a las declaraciones de funciones de estilo "antiguo".let
no está izado, por lo que la función existe desde el momento en que lo esperarías naturalmente, en lugar de saltar a la parte superior de tu alcance.fuente