函数声明必须以function关键字开头并带函数名,是独立语句;函数表达式中function出现在表达式位置,可匿名或具名,本质是将函数作为值使用。

函数声明和函数表达式最直观的区分方式,就是看 function 关键字是否出现在语句开头。这是语法层面最可靠、最直接的判断依据。
函数声明:必须以 function 开头,带函数名
函数声明是一个独立的语句,格式固定:以 function 关键字起始,后跟**必需的函数名**、参数列表和函数体。
-
function sayHello() { console.log("Hi"); }✅ 合法声明 -
function() { ... }❌ 不是声明(缺少函数名,且不是语句开头) -
if (true) { function test() {} }⚠️ 语法虽被部分引擎容忍,但属于非标准用法,应避免
函数表达式:function 出现在表达式位置,可匿名或具名
函数表达式本质是“把函数当作值来使用”,所以它总出现在赋值、传参、括号包裹等表达式上下文中。function 关键字不位于语句开头。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
const fn = function() {};✅ 典型表达式(匿名) -
const fn = function greet() { return greet.name; };✅ 具名表达式(greet只在函数内部有效) -
(function() {})();✅ IIFE:括号强制解析为表达式 -
[1,2].map(function(x) { return x * 2; });✅ 作为回调传入
命名不是核心区别,位置才是关键
有人误以为“有没有名字”是主要区别,其实不然。函数表达式可以有名字,函数声明也必须有名字——真正决定语法类别的,是 function 所处的上下文:
- 语句开头 + 有名字 → 函数声明
- 赋值右侧、括号内、参数位、对象属性值等 → 函数表达式
一个快速识别技巧
把代码行复制到控制台执行前,先问一句:这一行如果删掉后面的大括号和函数体,剩下的部分是否仍是合法语句?
-
function foo()→ 剩下的是function foo(),语法错误 → 说明原写法是函数声明(完整语句才合法) -
const bar = function()→ 删掉函数体后是const bar = function(),仍是合法变量声明 → 属于表达式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










