有没有办法创建一个命名的立即调用的箭头函数表达式? [复制]
Posted
技术标签:
【中文标题】有没有办法创建一个命名的立即调用的箭头函数表达式? [复制]【英文标题】:Is there a way to create a named immediately invoked arrow function expression? [duplicate] 【发布时间】:2020-05-29 04:52:16 【问题描述】:我认为self-documenting code (wikipedia page) 的一种好方法是将其包含在命名块中。
对于只使用一次且目的不是很明显的长代码,可以将其放入命名的 IIFE1 (different variations) 中,而不是使用 cmets:
(function functionName()
// ...
)();
函数命名代码,立即调用它并且是局部作用域的。
这对我来说似乎不错,但出于美学原因,我想改用 arrow function expression。
未命名的“anonymous”IIAFE2:
(() =>
// ...
)();
有没有办法创建命名的 IIAFE?
以下尝试引发 SyntaxError:
(const functionName = () =>
// ...
)();
Uncaught SyntaxError: Unexpected token 'const'
1IIFE - 立即调用的函数表达式2 IIAFE - 立即调用的箭头函数表达式
【问题讨论】:
这能回答你的问题吗? How do I write a named arrow function in ES2015? 尤其是关于fact
的部分和说你必须把它分成两个表达式的部分(我认为你应该这样做)
@Wyck 我刚刚在this page 中发现了一些标签,这看起来也很不错。
【参考方案1】:
为了解决自我记录代码的问题,下面使用 cmets 的解决方案可能更合适。
解决方案 1:
// explanation of purpose of this block of code
// locally scoped code
解决方案 2:
(() => // explanation
// code
)();
解决方案 3:
// explanation of code below
// code
// optional end of code mark
解决方案 4:
(function functionName()
// code
)();
至于是否有可能有一个命名的 IIAFE:
如果没有 const
语句,它将向全局范围声明一个命名的 IIAFE:
(functionName = () =>
// ...
)();
可以通过这种方式将其声明到本地范围:
let functionName;
(functionName = () =>
// ...
)();
以下内容不会立即调用,但可以使用:
const functionName = () =>
// ...
;
functionName();
将其包含在匿名 IIAFE 中可能是一种解决方法,但可能过于复杂:
(() =>
const functionName = () =>
// ...
;
functionName();
)();
【讨论】:
最后一个只是一个匿名的IIAFE,然后将函数的返回值赋值给一个const。匿名函数未分配给functionName
。
@NicholasTower 你是对的。它似乎确实适合问题中解释的目的,但如果您认为它应该被删除或解释,请随时编辑答案,它是社区 wiki。
It does seem to fit for the purpose explained in the question
问题是关于制作一个命名的 iife。它不这样做。它产生一个命名的返回值。自我记录的代码很好,但是任何理解代码的人都会感到困惑,为什么将不是函数的东西称为函数。
最后一个显然是错误的,应该在引起混乱之前将其删除。特别是因为它分配给一个名为functionName
的变量。这既不是函数的名称,也不是函数对象。它只包含函数调用的结果。
如果你认为需要的话,在函数的开头写一个简单的注释不是更容易吗...?!以上是关于有没有办法创建一个命名的立即调用的箭头函数表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章