2017-01-22 9 views
-1

私はオブジェクトを返すIIFEを持っています。私のapp.jsファイル(index.html内のscriptタグに追加する)では、typeof私のIIFEのコンソールにログオンし、それがオブジェクトです。それは機能ではありませんか?なぜ型はオブジェクトを返すのですか?IIFEの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); 
+3

わかりません。あなたはこのコードが何であるかを理解しているように聞こえる "IIFE"という言葉を使っています。しかし、関数の代わりにオブジェクトを取得する理由を尋ねると、このコードが何であるかを理解していないように見えます。 IIFEは何と思いますか?なぜあなたは機能を期待していますか? – ruakh

+0

私はそれが何をするのか理解していますが、typeof UIControllerはなぜ関数ではなくオブジェクトですか?私が関数式を書いてその型をコンソールに記録した場合、それはオブジェクトではなく関数なので、なぜこの場合にオブジェクトが得られますか? – Mjuice

+0

なぜ 'var x =" foo ".length; typeof x'' '' foo''が 'string'のとき' number'を返しますか? – melpomene

答えて

5

生命維持の略言い換えれば、機能を呼び出すことによって作成された表現。 を呼び出すことは、関数を呼び出して結果を生成することを意味します。 IIFEの値は、関数自体を呼び出すのではなく、関数を呼び出す(呼び出した)結果です。

この例では、変数UIControllerに関数を呼び出した結果が割り当てられています。あなたの関数は、2つのプロパティを持つオブジェクトを返しました。オブジェクトはUIControllerに割り当てられています。したがって、typeof UIControllerは、期待通りにobjectを生成します。

+0

今はOKです。あなたの非常に重要な答えをありがとう。 – Mjuice

+0

まあまあです。このことを混乱させるのは明らかではありません。 –

関連する問題