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

The positions of IIFEs (immediately invoked function expressions) of JS cause an unexpected error

以下包含 IIFE 的代码在 Node(node: v8.6.0) 环境中导致错误。

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

​​​​​​A(...) is not a function​​

这个错误信息让我很困惑。

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

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

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

在此代码段中:

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

你从第三行开始,( 被 JS 解析器解释为函数调用。在这种情况下 automatic semicolon insertion 让你失望。

您可以试试这个:

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

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

两者都能解决问题。

避免与 ([ 对视。

如果你使用 ; 你可以解决这个问题。

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

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