我们可以省略 JavaScript IIFE 的主括号吗?

Can we omit the main parentheses for JavaScript IIFEs?

省略 JavaScript IIFE 的主括号 (...) 并在末尾仅使用 (); 以及当函数表达式分配给 a变量?

let foo = function() {
  return 'Hello'
}();

// so we use 'foo', not 'foo()'
console.log(foo); // 'Hello'

虽然 TypeScript 在没有警告的情况下接受它,但我们应该总是这样做吗?

let foo = (function() {
  return 'Hello'
})();

您应该始终将立即调用的函数括在括号中。它更清楚地表明它是一个 IIFE,省略括号会导致语法错误。它不会总是,但这两个角色真的值得模棱两可吗?

如果你不包装你的函数,那么我,作为将来检查你的代码的另一个开发人员,必须知道滚动到你的函数的底部,然后我才能知道它正在被调用而不是函数定义。

简答 "yes" 但因为您通常不会分配给 var。您将用括号括起来以包含定义和强制 "scope",它只会在那一刻存在,而 () 之后它会实际执行它。

IIFE 函数可能 return 本身没有任何值,因此在这些情况下,您不需要将 IIFE 结果分配给变量。如果您不将 IIFE 括在括号中并且不将其分配给变量,则会出现语法错误。所以在 IIFE 中使用括号是必要的。