Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

337
Vistas
¿Por qué el código da error si intento acceder a la matriz devuelta por str.split(), inmediatamente en la siguiente línea?

¿Por qué sucede que el siguiente código arroja el error Uncaught ReferenceError: Cannot access 'arr' before initialization

 function swap(str,a,b){ let arr = str.split("") [arr[a],arr[b]] = [arr[b],arr[a]] return arr.join("") }
 swap("abcde",2,4) // throws error "Uncaught ReferenceError: Cannot access 'arr' before initialization"

Pero tan pronto como inserto una declaración ficticia entre las líneas 2 y 3, sorprendentemente el código comienza a funcionar.

 function swap(str,a,b){ let arr = str.split("") 23456; // this could be anything like a variable declaration, or any valid javascript statement [arr[a],arr[b]] = [arr[b],arr[a]] return arr.join("") }
 swap("abcde",2,4) // returns "abedc" as expected

Me sorprende ver por qué esto funciona ahora. Debería haber dado error en ambos casos, o debería haber funcionado en ambos casos. Estoy seguro de que en el primer caso, la split no termina su trabajo hasta que se ejecuta la línea de tiempo 3 y en el segundo caso, obtiene suficiente tiempo debido a 1 instrucción adicional en el medio. Pero aún me encantaría obtener una explicación clara de por qué se está comportando así. No estoy seguro de si esto es igual para todos los navegadores, pero lo probé en Chrome y Safari en Mac, y ambos dieron el mismo error.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El punto y coma marca la diferencia. JavaScript cree que desea acceder al resultado de str.split("")[arr[a],arr[b]] como una matriz. Esta es la razón por la cual los formateadores automáticos de JavaScript insertarán un punto y coma al comienzo de la siguiente línea como esta:

 function swap(str,a,b){ let arr = str.split("") ;[arr[a],arr[b]] = [arr[b],arr[a]] // <--- semicolon in front of this line return arr.join("") }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que su sintaxis está un poco dividida, devolverá una matriz y seguirla con corchetes se traduce como si estuviera tratando de acceder a un elemento de la matriz. Creo que solo le falta el punto y coma.

 let arr = str.split("")[arr[a],arr[b]] = [arr[b],arr[a]] 

 function swap(str,a,b){ let arr = str.split(""); [arr[a],arr[b]] = [arr[b],arr[a]] return arr.join("") } console.log(swap('some tpyo', 6, 7))

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda