[英]When I log typeof an IIFE to the console, it is an object instead of a function, why?
我有一个返回对象的 IIFE。 在我添加到 index.html 中的脚本标记的 app.js 文件中,我登录到我的 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);
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.