JavaScript函数不写return默认返回undefined,这是语言设计的隐式约定;判断依据是函数体有无显式return语句、调用时是否消费返回值,以及函数命名与用途是否匹配。

JavaScript 中函数不写 return,默认返回 undefined——这不是错误,而是语言设计的隐式约定。识别它,关键不在“有没有 return”,而在于“有没有被消费”和“是否符合预期用途”。
看函数体有没有显式 return 语句
这是最直接的判断方式。如果函数体末尾没有 return,或只有 return;(不带表达式),那它就按规则返回 undefined:
-
function sayHi() { console.log("hi"); }→ 调用后返回undefined -
function add(a, b) { return a + b; }→ 返回计算结果,不是undefined -
function noop() { return; }→ 显式提前退出,仍返回undefined
观察调用位置是否“使用了返回值”
控制台显示 undefined,往往不是函数出问题,而是你没对返回值做任何处理:
-
squirrel.jump();单独一行执行 → 控制台输出undefined(因为表达式求值结果未被消费) -
console.log(squirrel.jump());→ 输出实际字符串,如"noname jumping" -
const res = squirrel.jump();→res的值才是函数真正返回的内容
结合函数命名与上下文意图判断
很多函数本就不该有返回值,比如 render()、saveToStorage()、logError()。它们的作用是“做事”,不是“给结果”。这类函数即使返回 undefined,也完全合理:
- 如果函数名是动词短语且无“get”“fetch”“calculate”等暗示产出的词,大概率设计为无返回值
- 如果它出现在
if (doSomething()) { ... }这类条件判断中却总进不去,就要检查是否误把副作用函数当成了布尔判断依据 - 类方法中 setter(如
set color())规范上不期望返回值,即使写了return this._color也是冗余的
用 typeof 或严格相等辅助验证
运行时确认一个值是不是 undefined,推荐以下安全方式:
-
typeof value === 'undefined'—— 最稳妥,不会因变量未声明而报错 -
value === undefined—— 可用,但要求undefined未被局部重定义(现代环境基本安全) - 避免用
== undefined或!value,它们会把null、0、false、''都误判为“未定义”

















