2014-12-05 146 views
-1

我不明白爲什麼下面的函數不返回{bar:「hello」},而是返回undefined。爲什麼這個函數返回undefined?

function foo2() { 
    return 
    { 
     bar: "hello" 
    }; 
} 
+3

'return'之後,在大括號之前有一個回車符。嘗試'返回{'而不是。 – sherb 2014-12-05 05:30:21

+2

您可能想要在JavaScript中閱讀[自動分號插入](http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi)。 – Ben 2014-12-05 05:31:48

回答

5

這是因爲它編譯爲以下,因爲JavaScript的自動分號插入。

function foo2() { 
    return; // notice the semi-colon here? 
    { 
     bar: "hello" 
    }; 
} 

而且,由於return;被調用時,函數終止而不要去的下一行代碼。 爲了讓它正常工作,只需在return之後將右括號正確地放在return {之間

您最好使用分號而不是忽略它們。想要理由?檢出Dangers of Javascript's automatic semicolon insertion

+0

請注意,這是幾乎所有JS教程,樣式指南,書籍等在JS歷史中創建的ASI危險的*精確*示例。任何花費3秒時間學習JS的人都知道這一點。 – 2014-12-05 05:32:20

+0

嗯,_maybe_ 4秒... :-) – sherb 2014-12-06 00:08:47

1

JS引擎在return之後插入分號。

function foo2() { 
    return; 
    { 
     bar: "hello" 
    }; 
} 

更改爲這是確定

function foo2() { 
    return { 
     bar: "hello" 
    }; 
} 

關於自動插入分號,又名ASI,你可能需要閱讀thisthisthis