2017-01-22 5 views
-1

개체를 반환하는 IIFE가 있습니다. index.html에있는 script 태그에 추가하는 app.js 파일에서 typeof my IIFE 콘솔에 로그하며 객체입니다. 그것은 함수가 아니어야합니까? 왜 typeof 객체를 반환 무엇입니까?typeof를 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

나는 그것이 무엇을하는지 이해하지만, typeof UIController가 함수 대신에 왜 객체인가? 함수 표현식을 작성하고 해당 유형을 콘솔에 기록한 경우 오브젝트가 아닌 함수가되므로이 경우 오브젝트를 가져 오는 이유는 무엇입니까? – Mjuice

+0

왜'var x = "foo".length; typeof x'''foo ''가'string' 일 때'number'를 반환하겠습니까? – melpomene

답변

5

인생가 약자 즉, 기능를 호출하여 생성 된 식입니다. 을 호출하는 함수는 함수를 호출하고 결과를 생성하는 것을 의미합니다. IIFE의 가치는 함수 자체가 아니라 함수를 호출 (호출) 한 결과입니다.

예에서 변수 UIController에 함수를 호출 한 결과가 할당됩니다. 함수가 두 개의 속성을 가진 객체를 반환했습니다. 개체는 UIController에 할당됩니다. 따라서 typeof UIController은 예상대로 object을 생성합니다.

+0

이제 Ok가 좋습니다. 비판적인 대답에 감사드립니다. – Mjuice

+0

괜찮아. 이것으로 혼란스러워지는 것이 명백하고 쉽지 않습니다. –