JS的IIFE(立即调用函数表达式)的位置导致意外错误

时间:2018-04-18 13:15:11

标签: javascript iife

以下代码(包括IIFE)会导致Node(node:v8.6.0)环境出错。

function A(){}
A()
(function(){})()
  

A(...)不是函数

此错误信息让我感到困惑。

如果我更改IIFE的位置,代码将在Node中成功运行。

(function(){})()
function A(){}
A()

我在谷歌搜索了答案,但没有找到原因。

2 个答案:

答案 0 :(得分:2)

在此片段中:

function A(){}
A()
(function(){})()

您正在使用(开始第三行,JS解析器将其解释为函数调用。在这种情况下,automatic semicolon insertion会让您失望。

您可以尝试这样做:

function A(){}
A(); // <-----
(function(){})()

function A(){}
A()
;(function(){})()

两者都可以解决问题。

避免与([一起开始。

答案 1 :(得分:0)

如果您使用;,则可以解决此问题。

表达式应以;结尾以避免此问题:

function A(){}
A();
(function(){})()