首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 函數聲明與函數表達式的提升差異詳解

     編輯:程式設計疑難解答

為什麼書上說「先調用後定義會出錯」,但實測沒事?

這取決於函數的定義方式:

1. 函數聲明(Function Declaration)

function foo() { console.log('foo'); }
foo(); // 正常執行,即使調用在定義之前

函數聲明會被「提升」至作用域頂部,包含函數體,因此隨處可呼叫。

2. 函數表達式(Function Expression)

var bar = function() { console.log('bar'); };
bar(); // 若調用在定義之前,會拋出 TypeError: bar is not a function

只有變數聲明 var bar 被提升,賦值(函數體)留在原地,調用時 bar 仍為 undefined。

核心概念:聲明提升

JavaScript 引擎在執行前會先掃描作用域,將所有 var 變數聲明與 function 聲明移至頂部。理解這一機制,能避免許多「未定義」錯誤。

現代建議

  • 優先使用 const/let + 箭頭函數,避免提升帶來的困惑。
  • 若需相互遞歸或舊瀏覽器相容,才考慮函數聲明。

書中說法可能基於舊版 ECMAScript 或簡化教學,建議參考 MDN 等權威文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved