Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

205
Visualizações
¿Por qué la línea anterior a la asignación de desestructuración de Javascript no inserta automáticamente un punto y coma usando ASI?

Esta pregunta se aplica al lenguaje JavaScript en general, pero el contexto específico con el que encontré este problema fue mientras resolvía problemas de listas enlazadas en LeetCode. En 206. Lista enlazada inversa , puede usar la función Asignación de desestructuración de Javascript para evitar el uso de variables temporales mientras mezcla punteros entre el actual y el anterior, por ejemplo, esta es una solución aceptada donde la asignación de desestructuración cambia correctamente los punteros .next en un objeto vinculado individualmente :

 /** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ var reverseList = function(head) { let [prev, curr] = [null, head] while (curr != null) { [curr.next, curr, prev] = [prev, curr.next, curr] } return prev }

Entonces, ¿por qué esta solución funciona para 141. Ciclo de lista enlazada ...

 var hasCycle = function(head) { if (!head) return false let [slow, fast] = [head, head] while (fast) { if (!fast.next) return false slow = slow.next fast = fast.next.next // [slow, fast] = [slow.next, fast.next.next] if (slow == fast) return true } return false };

pero la solución casi idéntica, que intenta utilizar la asignación de desestructuración para simplemente ahorrar espacio, no actualiza el valor del puntero (lo que provoca falsos positivos ya que los valores iniciales que apuntan a la cabeza nunca cambian)? Además, el acto de iniciar sesión en la consola antes de usar la asignación de desestructuración cambia el comportamiento; en lugar del falso positivo, ahora el código arroja un error de tiempo de ejecución para TypeError: Cannot set property '#<ListNode>' of undefined

 var hasCycle = function(head) { if (!head) return false let [slow, fast] = [head, head] while (fast) { if (!fast.next) return false // slow = slow.next // fast = fast.next.next console.log(slow.val, fast.val) [slow, fast] = [slow.next, fast.next.next] if (slow == fast) return true } return false };

La única diferencia entre el uso fallido en 141 y el uso exitoso en 206 es usar .next.next en lugar de simplemente .next , lo que me lleva a creer que la asignación de desestructuración está fallando por una razón relacionada con objetos o punteros anidados, pero No puedo encontrar una solución en StackOverflow o buscando en Google.

¿Por qué la línea anterior a la asignación de desestructuración de Javascript no inserta automáticamente un punto y coma usando ASI?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La inserción automática de punto y coma (ASI) no inserta un punto y coma al final de una línea de código cuando la combinación de la línea siguiente daría como resultado un código javascript "válido".

Más específicamente, los ejemplos comunes serían cuando la siguiente línea comienza con a ( o [ , que javascript puede interpretar como una llamada a una función o índice de una matriz, respectivamente.

Los ejemplos que ilustran cuándo es necesario insertar un punto y coma incluyen:

 let a = 0 let b = a (0 == false) ? findTruth() : contemplate() // interpreted as // let a = a(0 == false) ...

o, dentro del contexto del ejemplo,

 let a = 0 let b = 1 [a, b] = [b, a] // interpreted as // let b = 1[a, b] = [b, a]

Descubrí que esta referencia era ilustrativa sobre los tipos de casos extremos en los que ASI no insertará punto y coma: https://flaviocopes.com/javascript-automatic-semicolon-insertion/

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda