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

Javascript 当我将IIFE的类型记录到控制台时,它是一个对象而不是一个函数,为什么?,javascript,iife,Javascript,Iife,我有一个返回一个对象的生命。在我的app.js文件中,我将其添加到index.html中的脚本标记中,我登录到iLife的控制台类型,它是一个对象。它不应该是一个函数吗?为什么typeof返回一个对象 以下是我在app.js中的生活: var UIController = (function() { var DOMstrings = { inputType: '.add__type', description: '.add__description', value:

我有一个返回一个对象的生命。在我的app.js文件中,我将其添加到index.html中的脚本标记中,我登录到iLife的控制台类型,它是一个对象。它不应该是一个函数吗?为什么typeof返回一个对象

以下是我在app.js中的生活:

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
按预期生成
对象。

**记住立即调用的函数表达式函数(IIFE)是其变量无法 无法在函数外部访问&您不能调用该函数 函数显式(这将给出错误)**

*这里有一个简单的代码来明确IIFE的概念。 这个函数只打印hey&没有任何返回值*

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


我不明白。你用的是“iLife”这个词,听起来你确实明白这段代码是什么;但是你会问为什么你得到的是一个对象而不是一个函数,这听起来好像你不明白这段代码是什么。你认为生活是什么?为什么你希望得到一个函数?我理解它的功能,但是为什么UIController的类型是一个对象而不是一个函数?如果我编写了一个函数表达式并将其类型记录到控制台中,它将是一个函数,而不是一个对象,那么为什么在这种情况下我会得到一个对象?为什么
var x=“foo”.length;当
“foo”
是一个
字符串时,x的类型返回
编号
?生命的意义在于它立即被执行。问问你自己:当你的生命被立即执行时,你的生命会得到什么回报?你已经在第一句话中给出了答案。它是一个对象。Ok现在很有意义。谢谢你非批评性的回答。很好。这一点都不明显,也不容易被混淆。