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

时间:2017-01-22 06:07:44

标签: javascript iife

我有一个返回对象的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);

2 个答案:

答案 0 :(得分:5)

IIFE代表“立即调用的函数表达式。”换句话说,通过调用函数创建的表达式。 调用函数意味着调用函数并生成结果。 IIFE的值是调用(调用)函数的结果,而不是函数本身。

在您的示例中,变量UIController被赋予调用函数的结果。您的函数返回了具有两个属性的对象。该对象已分配给UIController。因此typeof UIController按预期生成object

答案 1 :(得分:0)

****记住立即调用的函数EXPRESSION FUNCTION(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