2017-01-22 18 views
-1

У меня есть IIFE, который возвращает объект. В моем файле app.js, который я добавляю к тегу script в index.html, я вхожу в консольный тип моего IIFE, и это объект. Разве это не функция? Почему typeof возвращает объект?Когда я записываю тип IIFE в консоль, это объект вместо функции, почему?

Вот мой IIFE в 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); 
+3

я не понимаю. Вы используете термин «IIFE», который звучит так, как будто вы * понимаете, что такое этот код; но тогда вы спрашиваете, почему вы получаете объект вместо функции, что заставляет его звучать так, как будто вы не понимаете, что это за код. Как вы думаете, что такое IIFE? Почему вы ожидаете получить функцию? – ruakh

+0

Я понимаю, что он делает, но почему тип UIController - объект вместо функции? Если бы я написал выражение функции и зарегистрировал его тип на консоли, это была бы функция, а не объект, так почему я получаю объект в этом случае? – Mjuice

+0

Почему "var x =" foo ".length; typeof x' return 'number', когда' 'foo" 'является' string'? – melpomene

ответ

5

IIFE означает Другими словами, выражение создается путем вызова функции. Вызов Функция означает вызов функции и получение результата. Значение IIFE является результатом вызова (вызова) функции, а не самой функции.

В вашем примере переменной UIController присваивается результат вызова функции. Функция возвращает объект с двумя свойствами. Объект присваивается UIController. Таким образом, typeof UIController производит object, как ожидалось.

+0

Ок теперь имеет смысл. Спасибо за ваш некритический ответ. – Mjuice

+0

Совсем хорошо. Это не совсем очевидно и легко путать с этим. –