当我将 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