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
相关产品推荐
相关产品推荐

