javascript - 单表达式箭头函数中的 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
吗?它会在“幕后”做一些不同的事情吗?这只是约定/可读性的问题吗?
解决方案
所做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
不是)
推荐阅读
- python - 如何使用 boto3 获取所有 AWS AMI 的列表?
- sql - 请求其他表中至少有 2 条记录
- java - 创建文本文件并添加到 zip 文件并在本地服务器中下载 spring boot
- php - 如何在 PHP 中将 ByteArray 字符串转换为 NEO 地址?
- facebook - Facebook 私人回复回复未提供 user_id
- azure - 如何创建与 adla 的链接服务
- c++ - 我可以根据其 operator() 的签名专门化可变参数模板参数吗
- java - 集成总线添加外部 jar 异常
- google-cloud-platform - 如何将堆栈驱动程序日志导出到文件以进行本地处理?
- angular - LocationStrategy.pushState(state: any, title: string, url: string, queryParams: string) - 什么是状态?