Perché una dichiarazione di ritorno Javascript non funziona quando il valore di ritorno è su una nuova riga?

Considera il seguente codice Javascript.

 function correct() { return 15; } function wrong() { return 15; } alert("correct() called : "+correct()); alert("wrong() called : "+wrong());  

Il metodo correct() nello snippet di codice sopra riportato restituisce il valore corretto che è 15 in questo caso. Il metodo wrong() , tuttavia, restituisce undefined . Questo non è il caso della maggior parte delle altre lingue.



La seguente funzione è comunque corretta e restituisce il valore corretto.

 function wrong() { return( 15); } 

Se la syntax è sbagliata, dovrebbe emettere qualche errore nel compilatore ma non lo fa. Perché succede?

Tecnicamente, i due punti in javascript sono facoltativi. Ma in realtà le inserisce solo per te in determinati caratteri di nuova riga se pensa che manchino. Ma le descrizioni che fa per te raramente sono ciò che realmente desideri.

E una dichiarazione di return seguita da una nuova riga dice all’interprete JS che un semi-colon deve essere inserito dopo quel return . Quindi il tuo codice attuale è questo:

 function wrong() { return; 15; } 

Che è ovviamente sbagliato. Quindi, perché funziona?

 function wrong() { return( 15); } 

Bene, qui iniziamo un’espressione con un open ( . JS sa che siamo nel mezzo di un’espressione quando trova la nuova linea ed è abbastanza intelligente da non inserire alcun punto e virgola in questo caso.

Se non c’è nulla dopo la dichiarazione di return su quella linea allora ; sarà inserito lì che risulterà nel ritorno senza valori => il valore di ritorno undefined è undefined .

Vedi: http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/

La riga di comando del javascript non può essere interrotta da interruzioni di riga. Ma gli argomenti delle funzioni possono essere interrotti, non altamente raccomandati (fatti nel tuo esempio).