为JavaScript IIFE省略主括号(...)
,并在函数表达式分配给变量的末尾仅使用();
,是否有任何错误(或错误做法)?
let foo = function() {
return 'Hello'
}();
// so we use 'foo', not 'foo()'
console.log(foo); // 'Hello'
TypeScript 毫无保留地接受此建议,我们应该始终这样做吗?
let foo = (function() {
return 'Hello'
})();
答案 0 :(得分:4)
您应该始终将立即调用的函数包装在括号中。更加清楚的是,它是IIFE,并且忽略括号会导致语法错误。不会总是这样,但这两个字符真的值得歧义吗?
如果您不包装函数,那么我作为将来检查代码的另一位开发人员,必须知道滚动到您函数的底部,然后才知道它正在被调用,而不是函数定义。 。
答案 1 :(得分:1)
简短回答“是”,但是因为您通常不会分配给var。您将用括号括起来以包含定义并强制使用“作用域”,该作用域仅在此刻存在,其后的()会实际执行它。
答案 2 :(得分:0)
IIFE函数可能不会从自身返回任何值,因此在这种情况下,您无需将IIFE结果分配给变量。如果不用括号将IIFE括起来,并且不将其分配给变量,则会出现语法错误。因此必须在IIFE中使用括号。