14

Date un'occhiata al codice qui sotto:Si tratta di un bug nella versione per sviluppatori di Firefox?

var c = 50; 

{ 
    console.log(y); 
    let y = 50; 
} 

Questo codice si prevede di lanciare una ReferenceError e lo fa. Ma nella console, il messaggio allegato con l'eccezione ha appena fatto saltare la mia mente. Dice:

ReferenceError: can't access lexical declaration 'c' before initialization

Nel codice c è la prima variabile dichiarata. Il messaggio di errore indica che qualcosa non va con la dichiarazione di c. È chiaramente la variabile all'interno del blocco, causando l'eccezione. Non possiamo usare variabili dichiarate usando let prima della sua dichiarazione. Quando mi dichiaro un'altra variabile nella prima riga, dire test, il messaggio di errore cambia in:

ReferenceError: can't access lexical declaration 'test' before initialization

mi sto perdendo qualcosa o ho ragione circa il bug? Ho l'ultima Firefox Developer Edition (versione 49.0a2).

Un'altra cosa che vale la pena di notare è che il blocco è semplicemente un blocco che racchiude, non è il corpo di una funzione.

+0

@Kaiido Quindi, è un bug giusto? Perché, in questo caso, Chrome ha il messaggio di errore previsto. –

+4

Se pensi che sia un bug, fai un bug report e diranno yay o nay. – epascarello

+0

@Bergi Il messaggio di errore mi confonde perché ho pensato che avrebbe detto che qualcosa non andava nella variabile 'y'. Invece, dice che c'è qualcosa di sbagliato nella variabile che è nella prima riga nel mio esempio. –

risposta