概要
様々なソースに対するコンパイル結果。
クロージャと変数のスコープ
グローバルなし
グローバルのつもりでも、必ず無名関数で括られる。
1 |
a = 1 |
1 2 3 4 5 6 7 |
// Generated by CoffeeScript 1.10.0 (function() { var a; a = 1; }).call(this); |
変数の宣言位置
変数は、それが属する関数の先頭で必ずvar宣言される。つまり、各変数はそれが属する関数内のローカルスコープを持つ。
1 2 3 4 5 |
func = -> console.log("start") a = 1 b = 2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Generated by CoffeeScript 1.10.0 (function() { var func, b; func = function() { var a; console.log("start"); return a = 1; }; b = 2; }).call(this); |
引数なしの無名関数によるクロージャ
1 2 |
-> console.log("here") |
1 2 3 4 5 6 7 |
// Generated by CoffeeScript 1.10.0 (function() { (function() { return console.log("here"); }); }).call(this); |
引数ありの無名関数によるクロージャ
1 2 |
(x) -> console.log(x * 2) |
1 2 3 4 5 6 7 |
// Generated by CoffeeScript 1.10.0 (function() { (function(x) { return console.log(x * 2); }); }).call(this); |
クロージャとdoの違い
1 2 3 |
-> do -> |
1 2 3 4 5 6 7 |
// Generated by CoffeeScript 1.10.0 (function() { (function() {}); (function() {})(); }).call(this); |
クラス
プロパティの宣言
1 2 3 4 5 6 7 8 9 |
class Person member1 = 1 @meber2 = 2 member3: 3 @member4: 4 constructor: -> member5 = 5 @member6 = 6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Generated by CoffeeScript 1.10.0 (function() { var Person; Person = (function() { var member1; member1 = 1; Person.meber2 = 2; Person.prototype.member3 = 3; Person.member4 = 4; function Person() { var member5; member5 = 5; this.member6 = 6; } return Person; })(); }).call(this); |