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

时间:2018-08-03 19:09:41

标签: javascript function anonymous-function

为JavaScript IIFE省略主括号(...),并在函数表达式分配给变量的末尾仅使用();,是否有任何错误(或错误做法)?

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

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

TypeScript 毫无保留地接受此建议,我们应该始终这样做吗?

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

3 个答案:

答案 0 :(得分:4)

您应该始终将立即调用的函数包装在括号中。更加清楚的是,它是IIFE,并且忽略括号会导致语法错误。不会总是这样,但这两个字符真的值得歧义吗?

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

答案 1 :(得分:1)

简短回答“是”,但是因为您通常不会分配给var。您将用括号括起来以包含定义并强制使用“作用域”,该作用域仅在此刻存在,其后的()会实际执行它。

答案 2 :(得分:0)

IIFE函数可能不会从自身返回任何值,因此在这种情况下,您无需将IIFE结果分配给变量。如果不用括号将IIFE括起来,并且不将其分配给变量,则会出现语法错误。因此必须在IIFE中使用括号。