为什么出现在对象字面量表达式之后的 IIFE 会抛出错误?

问题描述 投票:0回答:1

我正在 JavaScript 文件中定义各种模块:

var module = {/* ... */}

(function(){
    console.log('Invoked');
})()

但是 IIFE 抛出错误:

类型错误:对象不是函数

我尝试仅复制并粘贴 IIFE 代码,没有问题。

javascript iife
1个回答
14
投票

模块定义需要在声明末尾加分号:

var module = {/* ... */}; // <======= Semicolon!

(function(){
    console.log('Invoked');
})()

没有它,Javascript 会尝试调用该对象:

var module = {/* ... */}(function(){console.log('Invoked');})()

或缩写:

var module = {/* ... */}()

当尝试相邻编写两个 IIFE 时,您会遇到同样的问题:

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

这不起作用,因为单个函数声明会返回

undefined

类型错误:未定义不是函数

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.