当我将 typeof 的 IIFE 记录到控制台时,它是一个对象而不是函数,为什么?
When I log typeof an IIFE to the console, it is an object instead of a function, why?
我有一个 returns 对象的 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);
IIFE 代表“立即调用的函数表达式”。换句话说,通过调用函数创建的表达式。 Invoking 一个函数意味着调用该函数并产生一个结果。 IIFE的值是调用(调用)函数的结果,而不是函数本身。
在您的示例中,变量 UIController
被赋值为调用函数的结果。您的函数返回了一个具有两个属性的对象。该对象已分配给 UIController
。所以 typeof UIController
按预期生成 object
。
**记住立即调用函数表达式函数 (IIFE) 是其变量不能
在函数外访问 & 你不能调用它
显式函数(这会出错)**
*这里是一个简单的代码来明确 IIFE 的概念。
这个函数只打印 hey & do not have any return value *
var run=(function(){
console.log("HEY");
})();
run(); //error
console.log(run); HEY
console.log(typeof(run)); undefined
*下面的 IIFE 函数 returns 值 *
var run=(function(){
return 1;
})();
run(); //error
console.log(run); 5
console.log(typeof(run)); number
我有一个 returns 对象的 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);
IIFE 代表“立即调用的函数表达式”。换句话说,通过调用函数创建的表达式。 Invoking 一个函数意味着调用该函数并产生一个结果。 IIFE的值是调用(调用)函数的结果,而不是函数本身。
在您的示例中,变量 UIController
被赋值为调用函数的结果。您的函数返回了一个具有两个属性的对象。该对象已分配给 UIController
。所以 typeof UIController
按预期生成 object
。
**记住立即调用函数表达式函数 (IIFE) 是其变量不能 在函数外访问 & 你不能调用它 显式函数(这会出错)**
*这里是一个简单的代码来明确 IIFE 的概念。 这个函数只打印 hey & do not have any return value *
var run=(function(){
console.log("HEY");
})();
run(); //error
console.log(run); HEY
console.log(typeof(run)); undefined
*下面的 IIFE 函数 returns 值 *
var run=(function(){
return 1;
})();
run(); //error
console.log(run); 5
console.log(typeof(run)); number