Немедленно вызванное функциональное выражение выдает «объект не является функцией».

StackOverflow https://stackoverflow.com//questions/21031820

  •  21-12-2019
  •  | 
  •  

Вопрос

Я определяю различные модули в Javascript файл:

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

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

Однако IIFE выдает ошибку:

> Типовая ошибка:объект не является функцией

Я попробовал просто скопировать и вставить IIFE код и нет проблем.

Это было полезно?

Решение

В определении модуля требуется точка с запятой в конце объявления:

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

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

Без него Javascript пытается вызвать объект:

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

Или сокращенно:

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

У вас возникнет та же проблема при попытке написать два IIFE рядом друг с другом:

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

Это не работает, потому что одно объявление функции возвращает undefined:

ТипОшибка:неопределенное не является функцией

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top