首页 > 解决方案 > 单表达式箭头函数中的 void

问题描述

我正在研究旧void运营商的用例。我已经看到提到的一个是防止箭头函数“泄漏”它们的结果,因为它们经常被编写(见fn0下面的例子)。

因此,该论点用于void在您实际上不需要结果的情况下防止此类泄漏(请参阅 参考资料fn2),但我并没有真正看到将语句括在括号中的区别(请参阅 参考资料fn1)。

function doSomething(number) { return number + 1 }

const fn0 = () => doSomething(1)
const fn1 = () => { doSomething(1) }
const fn2 = () => void doSomething(1)

console.log(fn0()) // 2
console.log(fn1()) // undefined
console.log(fn2()) // undefined

fn1有人可以向我解释和之间有什么区别fn2吗?它会在“幕后”做一些不同的事情吗?这只是约定/可读性的问题吗?

标签: javascript

解决方案


所做void的只是:

void 运算符计算给定的表达式,然后返回 undefined。

所以,这和返回是一样的undefined

当您没有明确地return从函数中获取任何内容时,undefined默认返回。所以这里没有区别。

其他等价物:

function doSomething(number) { return number + 1 }

const fn1 = () => { doSomething(1) }
const fn2 = () => void doSomething(1)
const fn3 = () => {
  doSomething(1);
  return undefined;
}
function fn4() {
  doSomething(1);
}
function fn5() {
  return void doSomething(1);
}
function fn6() {
  doSomething(1);
  return void 'foo';
}

console.log(fn1()) // undefined
console.log(fn2()) // undefined
console.log(fn3()) // undefined
console.log(fn4()) // undefined
console.log(fn5()) // undefined
console.log(fn6()) // undefined

(请注意,箭头函数与非箭头函数的使用没有区别,除了箭头函数可以缺少{s,在这种情况下它们隐式返回以下表达式,可能是也可能undefined不是)


推荐阅读