2016-07-16 10 views
1
(function(value){ 

    var names = ["January","February","March","April","May","June","July", 
        "August","September","October","November","December"]; 

    value.name = function(number){ 
      return names[number]; 
    }; 

    value.number = function(name){ 
      return names.indexOf(name); 
    }; 
})(this.month = {}); 

console.log(month.name(2)); 
console.log(month.number("November")); 

このプログラムの仕組みを説明してください。なぜ新しいオブジェクトが関数の外で作成されたのかわかりませんでした。理由はです。演算子が使用されています。IIFE(即時呼び出し関数式)の概念に基づいたこのコードの出力を誰でも説明できますか?

答えて

1

thisはグローバルオブジェクト(関数内で使用されていないため)です。

this.month = {}は、グローバルオブジェクトのmonthに新しいオブジェクトを割り当てます。

割り当ては割り当てられた値として評価されるため、関数に渡されます。

これは、基本的に、書くためだけ醜いと直感的な方法である:

function myFunction(value) { 

    var names = ["January", "February", "March", "April", "May", "June", "July", 
     "August", "September", "October", "November", "December" 
    ]; 

    value.name = function(number) { 
     return names[number]; 
    }; 

    value.number = function(name) { 
     return names.indexOf(name); 
    }; 
} 

var month = {}; 
myFunction(month); 
console.log(month.name(2)); 
console.log(month.number("November")); 

関数を呼び出すために使用される()varを使用することはできませんので、それはthisを使用しています。

関連する問題