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

148
Visualizações
Nueva función de Javascript apila los números de línea de seguimiento en 2

Los números de línea de seguimiento de la pila de Javascript para el código dentro new Function están apagados por 2:

 const fn = new Function(` // line 1 try { // line 2 blah // line 3 } catch(e) { // line 4 return e.stack // line 5 } // line 6 `) console.log(fn())

Ejecutar el fragmento anterior produce:

 anonymous@https://stacksnippets.net/js line 12 > Function:5:5

donde debería decir Function:3:5 . Lo mismo cuando se ejecuta en el nodo:

 $ cat stack-trace-line-nums.js const fn = new Function(` // line 1 try { // line 2 blah // line 3 } catch(e) { // line 4 return e.stack // line 5 } // line 6 `) console.log(fn()) $ node stack-trace-line-nums.js ReferenceError: blah is not defined at eval (eval at <anonymous> (/tmp/stack-trace-line-nums.js:1:12), <anonymous>:5:5) ...

La forma más obvia de demostrarlo es poner todo el código en la misma línea:

 const fn = new Function('try { blah } catch(e) { return e.stack }') console.log(fn())

que produce:

 anonymous@https://stacksnippets.net/js line 12 > Function:3:7

en lugar de Function:1:7 .

¿Alguna idea de cuál es la causa o si hay una solución?

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

0

Registre la función en sí y verá lo que está pasando:

 const fn = new Function(` // line 1 try { // line 2 blah // line 3 } catch(e) { // line 4 return e.stack // line 5 } // line 6 `) console.log(fn); console.log(fn())

En realidad se convierte en:

 function anonymous( ) { // line 1 try { // line 2

La primera línea es la definición de la función, la segunda línea es el final de la lista de parámetros y el comienzo del bloque, y solo en la línea 3 se inserta el cuerpo real de la función pasada al constructor.

Entonces, solo agregue 2 al número de línea cada vez.

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