Немедленно вызванное функциональное выражение выдает «объект не является функцией».
-
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
:
ТипОшибка:неопределенное не является функцией
Не связан с StackOverflow