You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中空函数体的隐式返回机制及相关疑问

JavaScript中空函数体的隐式返回机制及相关疑问

咱们先抛出核心问题:JavaScript里空函数体会隐式返回undefined吗?

先看这个简单的测试:

console.log((() => {})())

看起来确实是这样对吧?控制台输出的就是undefined...

不过咱们来搞点“疯狂”的实验:

// but let's do something crazy

console.log(((undefined) => undefined)("defined"));

console.log((() => {
  var undefined = "defined";
  return undefined; 
})());

哦,原来我们可以在局部作用域(或者非严格模式下的全局作用域)重新声明undefined。

再看这个例子:

console.log(((undefined) => {
  var undefined = "defined_again";
})("defined"));

但这段代码的输出依然是undefined,这看起来函数并不是隐式返回了undefined,反而更像是把整个表达式当作了void(expr)的效果。

这种情况在TypeScript里也一致:

const result = (() => {})()
//    ^?: const result: void

那问题来了:如果按照规范里的描述,空函数体确实隐式返回undefined,那为什么当我们在函数体里重新声明undefined时,JS会无视词法作用域呢?

显然最终结果都是undefined,但我更好奇的是,这种隐式返回的实际实现行为到底是什么?空函数体真的有返回什么东西吗?

备注:内容来源于stack exchange,提问作者Asleepace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:08:08