JavaScript 函數傳回錯誤:換行符號誤解分號
在 JavaScript 中,函數通常用於傳回表示資料或功能的物件。但是,當 return 語句和物件之間存在換行符號時,就會出現一個微妙的問題,如本問題所示。
問題:
在提供的程式碼中,以下兩個函數說明了該問題:
<code class="javascript">function foo1(){ return {msg: "hello1"}; } function foo2(){ return {msg: "hello2"}; }</code>
如預期呼叫foo1()傳回物件“{”msg”:“hello1”}”。然而,呼叫 foo2() 會奇怪地回傳「undefined」。
原因:
這些函數之間的差異僅在於 foo2( 中物件之前的換行符) )。 JavaScript 使用自動分號插入 (ASI) 來推斷各種情況下省略的分號。
在 foo1() 中,由於 ASI,隱式分號被放置在 return 語句之後,將其與物件分開。這允許函數正確傳回物件。
但是,在 foo2() 中,換行符使 ASI 確信語句在到達物件之前就已完成。因此,該物件被解釋為單獨的語句並且不會返回。
解決方案:
要解決此問題,請在 return 語句和物件之間添加任何換行符應該避免。此外,為了清楚起見,一些開發人員使用分組運算子來明確包裝物件:
<code class="javascript">function foo2(){ return ({msg: "hello2"}); }</code>
透過將物件括在括號中,分組運算子可確保將其解釋為單一語句,即使有換行符也是如此禮物。
以上是為什麼 JavaScript 函數換行會誤解分號並回傳錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!