Когда я записываю typeof IIFE на консоль, это объект вместо функции, почему?
У меня есть IIFE, который возвращает объект. В моем файле app.js, который я добавляю в тег сценария в index.html, я регистрирую в консоли тип своего IIFE, и это объект. Разве это не должно быть функцией? Почему typeof возвращает объект?
Вот мой IIFE в app.js:
var UIController = (function() {
var DOMstrings = {
inputType: '.add__type',
description: '.add__description',
value: '.add__value',
addBtn: '.add__btn'
};
return {
getInput: function() {
// return an object containing all values from UI elements
return {
type: document.querySelector(DOMstrings.inputType).value, // will be either income or expense
description: document.querySelector(DOMstrings.description).value, // description of transaction
value: document.querySelector(DOMstrings.value).value // value of transaction
};
},
getDOMStrings: function() {
return DOMstrings;
}
};
})();
console.log(typeof UIController);
1 ответ
IIFE означает "немедленно вызванное выражение функции". Другими словами, выражение, созданное путем вызова функции. Вызов функции означает ее вызов и получение результата. Значение IIFE является результатом вызова (вызова) функции, а не самой функции.
В вашем примере переменная UIController
присваивается результат вызова функции. Ваша функция вернула объект с двумя свойствами. Объект назначен UIController
, Так typeof UIController
производит object
как и ожидалось.
** ПОМНИТЕ, что немедленно вызываемая ФУНКЦИЯ ВЫРАЖЕНИЯ ФУНКЦИИ (IIFE) - это функции, переменные которых не могут быть доступны вне функции, и вы не можете вызвать эту функцию явно (это приведет к ошибке) **
* вот простой код, чтобы прояснить концепцию IIFE. эта функция просто печатает эй и не имеет возвращаемого значения *
var run=(function(){
console.log("HEY");
})();
run(); //error
console.log(run); HEY
console.log(typeof(run)); undefined
* Ниже функции IIFE возвращает значение *
var run=(function(){
return 1;
})();
run(); //error
console.log(run); 5
console.log(typeof(run)); number