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(){})()
以下包含 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(){})()