箭头函数和对象

2022-10-24 16:26:53 浏览数 (1)

有一个函数很短,比如这样:

代码语言:javascript复制
function getData() {
    return { data: 1 }
}

console.log(getData())
// { data: 1 }

想用ES6箭头函数语法简化一下,于是写成这样:

代码语言:javascript复制
const getData = () => { data: 1 }

console.log(getData())
// undefined

怎么会是呢?

解析

根本原因在于这一段:

代码语言:javascript复制
const getData = () => { data: 1 }

如果用传统function来写,和下面是等价的:

代码语言:javascript复制
function getData() {
    data: 1
}

那么还有一个问题,第二行这个玩意居然是合法语句?

是的,它定义了一个标签,一般套在循环结构外面,比如下面的:

代码语言:javascript复制
let i, j

outer:
for (i = 0; i < 10; i  ) {
    for (j = 0; j < 10; j  ) {
        if (j == 2) {
            break outer
        }
    }
}

console.log(i, j)
// 0 2

果然和Java一个模子里刻出来的,这个语法一模一样。

解决方法

到这里就很简单了,把第一行改一下即可。

代码语言:javascript复制
const getData = () => ({ data: 1 })

不过这么多括号着实有点丑。

0 人点赞