2014-06-09 11 views
21

Considerare queste due funzioni.Perché la posizione delle parentesi graffe in JavaScript è importante?

function func1() { 
    return 
    { 
     foo: 'bar' 
    } 
} 

function func2() { 
    return { 
     foo: 'bar' 
    } 
} 

alert(typeof func2()) //return object

alert(typeof func1()) //return undefined

Perché la posizione delle parentesi graffe importa quando in molte altre lingue non è così? È una funzionalità linguistica o un bug?

risposta

44

A causa di automatic semicolon insertion. Il primo codice è lo stesso

function func1() { 
    return; 
    { 
     foo: 'bar' 
    } 
} 

Se vi chiedete perché questo codice non produce un errore di sintassi, foo: è un label.

Per quanto riguarda

E 'una caratteristica del linguaggio o di un bug?

È una funzionalità. Ma molto pericoloso. Il modo migliore per mantenerlo una caratteristica è di attenersi a uno stile di formattazione coerente (suggerirei di usare lo Google style guide finché non ne hai abbastanza per crearne uno tuo).

+0

Questo sarebbe migliorato da un collegamento a [12.9 Dichiarazione di ritorno] (http://www.ecma-international.org/ecma-262/5.1/#sec-12.9) che [Ejay ha sottolineato] (http: //stackoverflow.com/questions/24120708/why-does-the-position-of-braces-in-javascript-matter#comment37213016_24120708). –

+0

JS non viene compilato. – Scimonster

Problemi correlati