今さらCoffeeScriptでクロージャ
仕事でCoffeeScriptを使っている。
練習も兼ねて、クロージャを書く。
CoffeeScript、Rubyと似ている…。
素のJavaScriptと比べて、色々と省略できすぎるため、初見では何を書いているかさっぱり分からない。
引数を2倍にする関数、3倍にする関数を返す。
factory = (type, num) -> { double: -> num = num * 2 console.log num triple: -> num = num * 3 console.log num }[type]
numは、関数スコープの外側に保持される。
double関数, triple関数はそれぞれクロージャとなる。
素のJavaScriptに書き換えると、以下になる。
var factory = function(type, num) { return { double: function() { num = num * 2 console.log(num) }, triple: function() { num = num * 3 console.log(num) } }[type] }
クロージャをそれぞれ実行。
変数numが保持されていることが分かる。
double = factory('double', 1) double() # 2 double() # 4 double() # 8 triple = factory('triple', 3) triple() # 9 triple() # 27 triple() # 81