函数表达式是将匿名函数赋值给变量的定义方式,支持传递、动态创建和立即执行,适用于回调、高阶函数等灵活场景,且无提升特性。

函数表达式是一种把函数当作值来处理的定义方式,它更像“把工具装进盒子里”,而不是直接起个名字摆在架子上。这种方式在需要灵活传递、动态创建或临时使用函数时特别实用。
函数表达式的基本写法
核心是用 var/let/const 声明一个变量,再把 function 关键字开头的匿名函数 赋值给它:
- JavaScript 示例:const greet = function(name) { return `你好,${name}!`; };
- 这里 greet 不是函数名,而是变量名;函数本身没有名字(即匿名),它的“身份”由变量承载
- 调用时和普通函数一样:greet("小明") → 返回 "你好,小明!"
为什么适合做工具函数?
工具函数强调“即取即用、可传可存”,函数表达式天然匹配这种需求:
- 可以作为参数传给其他函数,比如 [1, 2, 3].map(function(x) { return x * 2; })
- 能放在对象里当方法:const utils = { format: function(str) { return str.trim().toUpperCase(); } };
- 支持立即执行(IIFE):(function() { console.log("初始化完成"); })();,适合一次性配置逻辑
- 避免污染全局命名空间——没有函数声明那样的“提升(hoisting)”,定义前不可用,反而更可控
和函数声明的关键区别
别把函数表达式当成函数声明的“简写版”,它们行为不同:
- 提升差异:函数声明会被整体提升到作用域顶部,可先调用后定义;函数表达式不会提升,必须先赋值再调用
- 命名可选:表达式里的函数可以匿名,也可以有名字(用于调试或递归),但这个名字只在函数内部可见
- 适用场景不同:函数声明适合主流程中明确、复用频繁的工具(如 calculateTotal());表达式更适合回调、高阶函数、配置项等“即插即用”场合











