首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

红宝书第五讲:函数声明与表达式小白详解

  • 25-04-17 17:01
  • 2885
  • 7606
juejin.cn

红宝书第五讲:函数声明与表达式小白详解

资料取自《JavaScript高级程序设计(第5版)》。 查看所有教程:红宝书学习大纲


一、函数声明:先上车后买票

1. 基本语法
用 function 关键字直接定义函数:

javascript
代码解读
复制代码
function 打招呼() { console.log("你好!"); }

2. 核心特点

  • 提前可用(提升):函数声明会被自动提升到作用域顶部,可以先调用后定义1:
    javascript
    代码解读
    复制代码
    打个招呼(); // ✅ 正常执行 function 打个招呼() { console.log("大家好!"); }

3. 适用场景
适合需要多次复用的逻辑模块,或需要提前调用的功能。


二、函数表达式:先买票再上车

1. 基本语法
将匿名函数赋值给变量:

javascript
代码解读
复制代码
const 求和 = function(a, b) { return a + b; };

2. 关键区别

  • 无法提前使用:变量名会被提升,但函数必须赋值后才能调用1:
    javascript
    代码解读
    复制代码
    sayHello(); // ❌ 报错:未赋值 const sayHello = function() { console.log("Hi!"); };
  • 结尾必须加分号:因为它本质是变量赋值语句2:
    javascript
    代码解读
    复制代码
    const 打印 = function(msg) { console.log(msg); }; // ✅分号不可少

3. 使用场景
适合需要灵活赋值的场景(如回调函数、条件判断中动态选择函数)。


三、对比与易错点

对比表:函数声明 vs 表达式

特征函数声明函数表达式
提升行为整个函数被提升变量名提升,但赋值未被提升1
分号结尾不需要必须加分号2
适用范围全局或函数作用域可在块级作用域中

举例说明:作用域差异

javascript
代码解读
复制代码
{ function 内部函数() { } // 实际被提升到全局作用域 const 内部函数表达式 = function() {}; } console.log(内部函数()); // ✅ 正常执行 console.log(内部函数表达式); // ❌ ReferenceError(变量未定义)

四、手把手练习

任务1:用函数声明实现乘法运算

javascript
代码解读
复制代码
function 乘积(x, y) { return x * y; } console.log(乘积(3, 4)); // 12

任务2:用函数表达式触发问候

javascript
代码解读
复制代码
const 问好 = function(名字) { return `你好,${名字}!`; }; console.log(问好("小明")); // 你好,小明!

常见错误

  • 漏交分号:(函数表达式末尾)
    javascript
    代码解读
    复制代码
    const 错误写法 = function() {} // ❌ 报错:预期语句结束符

总结

  • 需要提前调用 → 函数声明
  • 灵活控制逻辑 → 函数表达式

初学建议优先使用函数声明,避免变量提升导致的陷阱!


目录:总目录 上篇文章:红宝书第四讲:JavaScript原始值与引用值行为差异详解

Footnotes

  1. 函数声明提升与表达式未提升的对比,《JavaScript高级程序设计(第5版)》 第10章 ↩ ↩2 ↩3

  2. 函数表达式结尾必须加分号,类似于变量初始化,《JavaScript高级程序设计(第5版)》 第10章 ↩ ↩2

注:本文转载自juejin.cn的kovli的文章"https://juejin.cn/post/7491154248564310066"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top