繁体   English   中英

当我将一个 IIFE 的 typeof 记录到控制台时,它是一个对象而不是一个函数,为什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM