选函数类型应依场景而定:需提前调用选函数声明,局部封装或传值选函数表达式,短回调且无需this/arguments选箭头函数。

写 JavaScript 函数,关键不是“哪种最酷”,而是“哪种最合适”。函数声明、函数表达式、箭头函数三者语法不同,行为差异明显——选错可能引发提升失效、this 错乱、无法构造实例等问题。
函数声明:适合全局工具和可提前调用的逻辑
用 function 关键字 + 函数名 定义,自带提升(hoisting),允许在定义前调用。
- 适用于模块顶层的通用函数,比如
formatDate()、isValidEmail() - 命名清晰,调试时堆栈显示函数名,利于排查
- 不能用在条件分支中动态定义(如
if (...) { function foo() {} },行为不一致且已废弃)
函数表达式:适合局部封装与动态赋值场景
把函数赋给变量(常为 const 或 let),不会提升函数体,只提升变量声明。
- 适合闭包内部创建私有函数,或作为参数传入高阶函数(如
map、setTimeout) - 可命名(
const handler = function onClick() { ... }),方便调试和递归调用 - 配合 IIFE(立即执行)实现模块隔离,但现代开发中多被 ES 模块替代
箭头函数:适合简短回调,避开 this 和 arguments 陷阱
用 => 定义,无独立 this、无 arguments、不可用 new,但语法极简。
- 首选用于数组方法(
filter(x => x > 0))、事件回调(btn.addEventListener('click', () => {...}))等无需绑定上下文的场合 - 单参数可省括号,单表达式可省
{}和return,例如id => users.find(u => u.id === id) - 若需访问
arguments,改用剩余参数(...args) => console.log(args);若需动态this,必须换回函数表达式或声明
怎么选?看这三点快速判断
遇到一个新函数,问自己:
- 是否需要在定义前调用?→ 选 函数声明
- 是否要作为值传递、局部使用、或参与闭包?→ 选 函数表达式
- 是否只是短小回调,且不依赖
this、arguments、构造能力?→ 选 箭头函数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











