紅寶書第五講:函數(shù)聲明與表達式小白詳解

紅寶書第五講:函數(shù)聲明與表達式小白詳解

資料取自《JavaScript高級程序設計(第5版)》。
查看所有教程:紅寶書學習大綱


一、函數(shù)聲明:先上車后買票

1. 基本語法
function 關鍵字直接定義函數(shù):

function 打招呼() {
  console.log("你好!");
}

2. 核心特點

  • 提前可用(提升):函數(shù)聲明會被自動提升到作用域頂部,可以先調(diào)用后定義[1]
    打個招呼(); // ? 正常執(zhí)行
    function 打個招呼() {
      console.log("大家好!");
    }
    

3. 適用場景
適合需要多次復用的邏輯模塊,或需要提前調(diào)用的功能。


二、函數(shù)表達式:先買票再上車

1. 基本語法
將匿名函數(shù)賦值給變量:

const 求和 = function(a, b) {
  return a + b;
};

2. 關鍵區(qū)別

  • 無法提前使用:變量名會被提升,但函數(shù)必須賦值后才能調(diào)用[1]
    sayHello(); // ? 報錯:未賦值
    const sayHello = function() { console.log("Hi!"); };
    
  • 結(jié)尾必須加分號:因為它本質(zhì)是變量賦值語句[2]
    const 打印 = function(msg) { console.log(msg); }; // ?分號不可少
    

3. 使用場景
適合需要靈活賦值的場景(如回調(diào)函數(shù)、條件判斷中動態(tài)選擇函數(shù))。


三、對比與易錯點

對比表:函數(shù)聲明 vs 表達式

特征 函數(shù)聲明 函數(shù)表達式
提升行為 整個函數(shù)被提升 變量名提升,但賦值未被提升[1]
分號結(jié)尾 不需要 必須加分號[2]
適用范圍 全局或函數(shù)作用域 可在塊級作用域中

舉例說明:作用域差異

{
  function 內(nèi)部函數(shù)() { }  // 實際被提升到全局作用域
  const 內(nèi)部函數(shù)表達式 = function() {};
}
console.log(內(nèi)部函數(shù)());          // ? 正常執(zhí)行
console.log(內(nèi)部函數(shù)表達式);     // ? ReferenceError(變量未定義)

四、手把手練習

任務1:用函數(shù)聲明實現(xiàn)乘法運算

function 乘積(x, y) {
  return x * y;
}
console.log(乘積(3, 4)); // 12

任務2:用函數(shù)表達式觸發(fā)問候

const 問好 = function(名字) {
  return `你好,${名字}!`;
};
console.log(問好("小明")); // 你好,小明!

常見錯誤

  • 漏交分號:(函數(shù)表達式末尾)
    const 錯誤寫法 = function() {}   // ? 報錯:預期語句結(jié)束符
    

總結(jié)

  • 需要提前調(diào)用 → 函數(shù)聲明
  • 靈活控制邏輯 → 函數(shù)表達式

初學建議優(yōu)先使用函數(shù)聲明,避免變量提升導致的陷阱!


目錄:總目錄
上篇文章:紅寶書第四講:JavaScript原始值與引用值行為差異詳解



  1. 函數(shù)聲明提升與表達式未提升的對比,《JavaScript高級程序設計(第5版)》 第10章 ? ? ?

  2. 函數(shù)表達式結(jié)尾必須加分號,類似于變量初始化,《JavaScript高級程序設計(第5版)》 第10章 ? ?

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容