为什么箭头函数名必须是const/let?

Why arrow function name must be const/let?

我有一个带有 react-native 的 tsx 文件。如果函数未设置为 const 或 let 并显示此消息,我的函数名称将带有下划线:

Cannot find name 'goBack'

goBack = () => {
    // do stuff
}

但是如果我设置 const 或 let 就可以了:

const goBack = () => {
    // do stuff
}

为什么?

这与箭头函数没有任何关系。您正在尝试为未在任何地方声明的标识符赋值。

这个:

goBack = () => {
    // do stuff
}

将箭头函数分配给已经声明的标识符goBack。 (或者,如果这是在 class 中,它会创建一个新的 属性 并将箭头函数分配给它——但我们知道你不会在 class 中这样做,因为如果你这样做,你的 const 版本就会失败。)

完全像:

answer = 42;

如果未声明 [​​=17=],TypeScript 会报错。

这个:

const goBack = () => {
    // do stuff
}

创建一个局部变量(嗯,常量)并将箭头函数分配给它,就像:

const answer = 42;

记住箭头函数没有 声明 语法是很有用的。箭头函数始终是一个表达式。您示例中 = 左侧的部分不是该箭头函数表达式的一部分(尽管有些令人惊讶的是,它可以 )。