首頁 >web前端 >js教程 >當 Return 語句斷行時,為什麼 JavaScript 函數會回傳「未定義」?

當 Return 語句斷行時,為什麼 JavaScript 函數會回傳「未定義」?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-24 08:55:30658瀏覽

Why Do JavaScript Functions Return

當傳回語句斷行時,JavaScript 函數傳回「未定義」

在某些情況下,JavaScript 函數可能因以下原因無法傳回預期物件return 語句後的換行符號。當物件定義與return 語句之間透過換行符號分隔時,就會出現此問題,如範例程式碼所示:

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()));

這些函數之間的主要差異在於return 語句和return 語句之間的換行符。 foo2.h 中的物件定義JavaScript 的自動分號插入 (ASI) 機制會在 foo2 中的 return 語句後錯誤地插入分號,從而有效地結束函數的執行而不返回物件。這會導致在字串化 foo2() 時輸出“undefined”。

要避免此問題,可以採取多種方法:

  • 顯式分號:在return 語句後面加上分號,以防止ASI 插入意外的分號。
  • 括號(分組運算子): 將 return 語句和物件定義括在括號中,以強制 JavaScript 解釋該物件作為傳回表達式的一部分。
  • 將物件放在同一行上:避免 return 語句和物件定義之間換行,以防止 ASI 幹擾。

如果美觀考慮或程式碼可讀性超過了 ASI 問題的可能性,開發人員可以選擇使用分組運算子對表達式進行分組,如回應中提供的範例所示。然而,這種方法主要是偏好問題,不會影響程式碼的功能。

以上是當 Return 語句斷行時,為什麼 JavaScript 函數會回傳「未定義」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn