【发布时间】:2017-01-22 06:07:44
【问题描述】:
我有一个返回对象的 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 是什么?你为什么期望得到一个函数?
-
我明白它的作用,但是为什么 typeof UIController 是一个对象而不是一个函数呢?如果我写了一个函数表达式并将它的类型记录到控制台,那将是一个函数,而不是一个对象,那么为什么在这种情况下我会得到对象呢?
-
当
"foo"是string时,为什么var x = "foo".length; typeof x返回number? -
IIFE 的重点在于它是立即执行的。问问自己:当你的 IIFE 立即执行时,它会返回什么?你已经在第一句话中给出了答案。它是一个对象。
标签: javascript iife