函数表达式是将匿名函数赋值给变量的定义方式,需先声明后调用,无提升特性;基本形式为“变量名 = function(参数) { 函数体 }”,常用于回调、IIFE、条件赋值及模块导出,箭头函数是其简化形式。

函数表达式是一种把函数当作值来处理的定义方式,核心是“先赋值、后使用”,不具函数提升特性,调用前必须已声明。
函数表达式的基本写法
将匿名函数赋值给变量,语法结构清晰:变量名 = function(参数) { 函数体 }。函数本身没有名字,靠变量引用调用。
- 必须用 var、let 或 const 声明变量,否则会变成全局变量或报错(严格模式下)
- 函数体可包含任意逻辑,支持 return 返回值,无 return 则返回 undefined
- 调用时直接使用变量名加括号,如
myFunc(1, 2)
常见使用场景
函数表达式适合需要动态创建、延迟执行或作为参数传递的情况。
-
作为回调函数:传给
setTimeout、addEventListener等异步操作 -
立即执行(IIFE):用
(function(){...})()创建独立作用域,避免污染全局 -
条件赋值:根据环境或配置决定赋哪个函数,例如
const handler = isProd ? logError : debugLog -
导出模块函数:在 CommonJS 或旧式脚本中,常通过
module.exports = function(){...}暴露功能
注意与函数声明的区别
函数表达式不会被提升,不能在声明前调用;而函数声明会被整体提升到作用域顶部。
- 以下会报错:
foo(); const foo = function() { console.log('hi'); }; - 但函数声明可以:
bar(); function bar() { console.log('ok'); }—— 这是合法的 - 函数表达式更接近“值”的行为,能参与运算、存储在数组或对象中、作为参数传入其他函数
扩展:箭头函数也是函数表达式的一种
ES6 的箭头函数 const add = (a, b) => a + b 本质是更简化的函数表达式,同样不具提升、没有自己的 this 和 arguments,适用于简洁回调和高阶函数场景。
- 单参数可省括号:
x => x * 2 - 单表达式可省 return 和花括号:
(a, b) => a + b - 含多语句需用花括号和显式 return:
(a, b) => { console.log(a); return a + b; }

















