为啥箭头函数名称必须是 const/let?

Posted

技术标签:

【中文标题】为啥箭头函数名称必须是 const/let?【英文标题】:Why arrow function name must be const/let?为什么箭头函数名称必须是 const/let? 【发布时间】:2019-12-01 08:38:06 【问题描述】:

我有一个带有 react-native 的 tsx 文件。如果 function 未设置为 const 或 let ,则我的函数名称带有下划线:

找不到名称“goBack”

goBack = () => 
    // do stuff

但如果我设置 const 或 let 它会起作用:

const goBack = () => 
    // do stuff

为什么?

【问题讨论】:

这取决于它在“tsx 文件”中的定义位置。它是在类内部(因此是该类的属性),还是在类定义之外?前者是允许的,后者是不允许的 不知何故,您的问题似乎不太可能与tsx... 当然,有道理。您是否在某处定义了名为goBack 的环境变量?这就是您要为其分配值的内容。如果不是,你需要一个本地的,你可以用 let/var/const 来做。这不仅仅是一个箭头函数,如果你做一个简单的字符串赋值也会出现这个错误。 【参考方案1】:

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

这个:

goBack = () => 
    // do stuff

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

一模一样:

answer = 42;

如果 answer 没有声明,你会从 TypeScript 中得到一个错误。

这个:

const goBack = () => 
    // do stuff

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

const answer = 42;

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

【讨论】:

啊好吧!谢谢!那么有什么更好的呢?函数 goBack() 或 const goBack = () => @Cracky - 两者之一,取决于各种情况。你需要它关闭this吗?使用箭头函数。需要完全吊起来吗?使用传统的function 声明。您想通过在代码中搜索function goBack 来找到它吗?使用传统功能。你打算用new吗?使用classfunction。如果您不关心 this 或提升,并且您不会使用 new,那么无论您使用箭头函数还是传统函数,这都是风格问题。

以上是关于为啥箭头函数名称必须是 const/let?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我使用箭头函数 onClick 时我的变量未定义?

React全栈:Redux+Flux+webpack+Babel整合开发

为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?

为啥必须在 ES2015 中指定导出的类型(let、var、const...)?

为啥js的箭头函数的this指向的是全局呢?

学JS的心路历程-函式箭头函式