请解释IIFE的两种语法

时间:2019-04-30 01:21:39

标签: javascript

depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify error:num=20:unable to get local issuer certificate verify return:0 poll errornotBefore=Jan 28 11:54:38 2019 GMT notAfter=Apr 28 11:54:38 2019 GMT (function () {})()之间是否有区别?

我已经看到两个结构都被引用,并且想知道它们是否代表构造完全相同的表达式的两种等效方法,或者它们是否是两个完全不同的表达式/结构?如果不同,它们有什么不同?

1 个答案:

答案 0 :(得分:2)

这些表达式是等效的。
创建一个闭包,然后调用。表达式的值是闭包的返回值。

最简单的形式是function () {}(),但是在顶层将使用IIFE,即SyntaxError。因此,将对闭包的创建或整个表达式加上括号。 但是,它可以在表达式上下文中使用,例如

let a = function () {}()

更新:您有时会看到的第三种形式(例如,在缩小的JS中)是!function () {}(),在这种情况下,返回值当然是不同的。