【问题标题】:Immediately invoked function expression throws "object is not a function"立即调用的函数表达式抛出“对象不是函数”
【发布时间】:2014-01-28 16:31:30
【问题描述】:

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

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

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

但是IIFE 会抛出错误:

> TypeError: object is not a function

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

【问题讨论】:

标签: javascript iife


【解决方案1】:

模块定义在声明的末尾需要一个分号:

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

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

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

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

或缩短:

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

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

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

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

TypeError: undefined is not a function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2017-04-06
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多