javascript
2013-08-14 9 views 26 likes 
26

Oto jsfiddleFunkcja JavaScript nie zwraca obiektu, gdy występuje przerwa między wierszami między instrukcją return a obiektem?

pełny kod:

function foo1(){ 
    return {msg: "hello1"}; 
} 
function foo2(){ 
    return 
    {msg: "hello2"}; 
} 

// output = "foo1 = {"msg":"hello1"}" 
console.log('foo1 = ' , JSON.stringify(foo1())); 

//output = " foo2 = undefined " 
console.log('foo2 = ' , JSON.stringify(foo2())); 

Różnica między nimi jest taka, że ​​w foo2 The {msg: 'hello'} jest w swojej nowej linii. Spodziewam się, że parser zignoruje białe spacje?

+2

Nie z oświadczeniem zwrotu Wierzę, pamiętam przeczytanie go gdzieś, że jest to jeden z rzadkich przypadków w JS, że białe znaki mają znaczenie. Możliwy duplikat http://stackoverflow.com/questions/8528557/a-return-statement-in-javascript-does-notwork-properly-if-turn-value-is – OJay

+0

Sprawdź ten link: http: // robertnyman.com/2008/10/16/beware-of-javascript-semicolon-insertion/ –

+0

Pewne spacje. Dowolna liczba normalnych spacji ASCII jest w porządku, natomiast nie zezwala się na pojedyncze LF/CR. Wydaje się to arbitralne, ale założę się, że istnieje logiczne wytłumaczenie, dlaczego wczoraj wieczorem straciłem godzinę w tej sprawie. Komunikat o błędzie laktatora mógł być dokładniejszy/pomocny ... – sss4r

Odpowiedz

22

Podziałka linii powoduje niezdefiniowanie w drugiej funkcji. JavaScript nie wymaga średników w wielu przypadkach i po prostu zakłada je w pewnych kontekstach.

+1

Jako dobra zasada ... zawsze zachowaj instrukcję return w jednym wierszu w JavaScript. – scunliffe

+0

Na domiar złego, istnieją różnice w parsowaniu między tym, jak Chrome/Firefox interpretuje koniec linii i jak interpretuje ją IE. –

+5

Powiązane: [Jakie są reguły automatycznego wstawiania średników w języku JavaScript (ASI)?] (Http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi) – bfavaretto

Powiązane problemy