javascript函数定义分声明式和表达式两种:声明式函数会被提升,可先调用后定义,适合主逻辑;表达式函数不提升,需先定义后调用,更灵活,适用于回调、闭包等场景。

函数定义在 JavaScript 中主要通过声明式(function declaration)和表达式(function expression)两种方式实现,它们都能产出可复用的代码,但行为、作用域和使用场景有明显区别。
声明式函数:先写后用,自动提升
声明式函数使用 function 关键字开头,后面紧跟函数名和参数列表。它会被 JavaScript 引擎“提升”(hoisted),即整个函数定义在代码执行前就加载进作用域,因此可以在声明之前调用。
- 语法简洁,适合逻辑主干或模块入口函数
- 不能用在条件语句或循环内部直接定义(虽然语法允许,但行为不可靠)
- 示例:function sayHello(name) { return `Hello, ${name}!`; },之后可随时调用
sayHello("Alice")
函数表达式:按需创建,更灵活控制
函数表达式把函数当作值来处理,通常赋给变量(也可作为参数传递或立即执行)。它不会被提升,必须在定义之后才能调用。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 支持匿名和命名两种形式,命名有助于调试栈追踪
- 常用于回调、高阶函数、IIFE(立即执行函数表达式)等场景
- 示例:const add = function(a, b) { return a + b; }; 或 const multiply = (x, y) => x * y;(箭头函数是表达式的一种简写)
如何选择?看复用需求和执行时机
如果函数需要在定义前就被调用(比如初始化逻辑中调用),优先用声明式;如果要动态生成、封装私有状态、作为参数传入或配合闭包使用,表达式更合适。
- 模块化开发中,常用表达式配合
export导出可复用函数 - 想让函数只在特定条件下存在?用表达式配合
if判断赋值,声明式做不到这点 - 避免在块级作用域(如
if内)混用声明式,不同引擎处理不一致,易出错
真正复用的关键不在语法,而在设计
无论哪种定义方式,函数要真正可复用,核心在于:单一职责、合理参数、无副作用、明确返回值。例如封装一个日期格式化函数,应接收日期对象和格式模板,返回字符串,不修改原数据也不依赖全局变量。
- 避免硬编码,把变化点抽成参数
- 用默认参数或解构简化调用方负担
- 配合 TypeScript 或 JSDoc 注明类型,提升跨团队复用性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










