javascript - 我们什么时候必须在 ES6 箭头函数中使用 () 和 {}
问题描述
我对在箭头函数中互换使用括号和花括号感到困惑。
例如,
花括号的使用
const sayHello = () => { console.log('Hello') }
括号的使用
const sayHello = () => ( console.log('Hello') )
两者都在控制台上提供相同的输出。他们两个意思一样吗?对不起,如果这个问题听起来很愚蠢。
解决方案
当您使用花括号(花括号)时,它定义了函数体 - 因此您可以在其中放置多个分号分隔的语句。如果您希望从函数返回值,则必须显式使用该return
语句。
如果使用括号,则将返回括号内表达式的值,并且只能有一个表达式(没有分号)。如果你想用括号做多件事,你可以使用逗号运算符:
const doTwoThings = () => (console.log("Hello"), console.log("Goodbye"));
console.log(doTwoThings());
在这里,您正在记录Hello
,然后Goodbye
,然后您正在记录函数的返回值 - 即undefined
.
你可以在花括号内做同样的事情,你不会看到任何明显的区别:
const doTwoThings = () => {console.log("Hello"), console.log("Goodbye")};
console.log(doTwoThings());
同样,您正在记录Hello
并Goodbye
到控制台,然后您正在记录函数的返回值 - 但是, using{}
需要具有显式return
关键字,所以这是undefined
因为我们不从函数返回任何内容。
另请注意,有时您会同时看到括号和花括号:
const aFunction = () => ({ foo: "bar" });
console.log(aFunction());
这里有一个很好的解释,但基本上当你有一个返回对象的函数时,花括号{}
表示该对象,而括号强制执行包含的表达式的隐式返回 - 对象。所以对象被创建,然后表达式被计算并返回。
推荐阅读
- reactjs - Material Ui table 减少列间距
- typo3 - 如何交付在模板外创建的 TYPO3 Fluid Form 元素?
- java - Android中随机输出中的EditText所有可能的数字
- java - 为什么这个二进制搜索代码在 Eclipse IDE 上给出错误的输出?
- anylogic - 插入从数据库加载的参数后,代理群体产生错误
- amazon-web-services - com.amazonaws.services.gluejobexecutor.model.InternalServiceException:要更新的项目大小已超过允许的最大大小
- sql - SQL:在有区间的交集中求和
- javascript - 如何将 x 天添加到从 datepicker 的 getDate() 返回的日期并以特定日期格式返回?
- laravel - 带有 Laravel 后端端到端测试的 Vue SPA
- spring - jdbc 无法在同一事务中找到 jpa 存储库刷新的数据