有没有办法创建一个命名的立即调用的箭头函数表达式? [复制]

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 的变量。这既不是函数的名称,也不是函数对象。它只包含函数调用的结果。 如果你认为需要的话,在函数的开头写一个简单的注释不是更容易吗...?!

以上是关于有没有办法创建一个命名的立即调用的箭头函数表达式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ES6 立即调用箭头函数

如何在 ES2015 中编写命名箭头函数?

浅谈javascript立即调用函数表达式

箭头函数和立即执行函数

(转)扫盲--JavaScript的立即执行函数

coffeescript 函数 箭头表达式