CoffeeScriptの関数定義 の->と => の違いがよく分かりません。
どのように使い分ければよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
JavaScriptのthisは、関数が呼ばれる文脈によって入ってくるものが違い、複雑なルールがあります。
そのため、thisがどの値かが重要になってくるのです。
単純なCoffeeScriptをコンパイルして生成されたコードを見てみます。
lang
1c = 2 a: -> @ 3 b: => @
lang
1var c; 2 3c = { 4 a: function() { 5 return this; 6 }, 7 b: (function(_this) { 8 return function() { 9 return _this; 10 }; 11 })(this) 12};
違いは、this
が_this
になっているところと、(function(_this) { return (``})(this);
で囲まれていることです。
ブラウザでc.a();
のように呼び出すと、c
を返しますが、c.b();
はWindow
オブジェクトを返します。
これは、最後から2行目の})(this)
となっている所のthis
がWindow
オブジェクトを指すためです。
まとめると、=>
はその位置でのthisを使いたい、->
はもともとのJavaScriptのルールに従ったthisを使いたいということになります。
投稿2014/10/09 02:25
総合スコア200
0
JavaScriptでthisは関数が所属しているオブジェクトを指します。
関数内でコールバック関数を使う場合、
コールバック関数内部ではthisの値は失われてしまいます。
これを避けるため、=>(ファットアロー)を使います。
コールバック関数を => で関数定義をすると、コールバック関数内でthis のプロパティを参照できるようになり
便利です。詳しくは関数バインディングで検索するとよいと思います。
投稿2014/10/08 07:30
総合スコア141
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/14 05:18