Immediately invoked function expression throws "object is not a function"

iife, javascript

Solution

The module definition needs a semicolon at the end of the declaration:

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

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

Without it Javascript is trying to call the object:

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

Or shortened:

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

You'd get the same problem when trying to writing two IIFEs next to each other:

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

This doesn't work because a single function declaration returns `undefined`:

TypeError: undefined is not a function

Problem

I'm defining various modules in a `Javascript` file: ``` var module = {/* ... */} (function(){ console.log('Invoked'); })() ``` However the `IIFE` throws an error: > TypeError: object is not a function I tried just copy and pasting the `IIFE` code and there is no issue.

Original source

Related problems