为啥箭头函数名称必须是 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
吗?使用class
或function
。如果您不关心 this
或提升,并且您不会使用 new
,那么无论您使用箭头函数还是传统函数,这都是风格问题。以上是关于为啥箭头函数名称必须是 const/let?的主要内容,如果未能解决你的问题,请参考以下文章
React全栈:Redux+Flux+webpack+Babel整合开发
为啥返回带有箭头函数的对象时,array.map 中需要 return 关键字?