我有一个返回对象的IIFE。在我的app.js文件中,我将其添加到index.html中的脚本标记中,我登录到我的IIFE的控制台类型,它是一个对象。它不应该是一个功能吗?为什么typeof返回一个对象?
这是app.js中的IIFE:
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);
答案 0 :(得分:5)
IIFE代表“立即调用的函数表达式。”换句话说,通过调用函数创建的表达式。 调用函数意味着调用函数并生成结果。 IIFE的值是调用(调用)函数的结果,而不是函数本身。
在您的示例中,变量UIController
被赋予调用函数的结果。您的函数返回了具有两个属性的对象。该对象已分配给UIController
。因此typeof UIController
按预期生成object
。
答案 1 :(得分:0)
****记住立即调用的函数EXPRESSION FUNCTION(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