質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

Q&A

解決済

2回答

5964閲覧

CoffeeScript -> と => の違い

dboyaji

総合スコア62

CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

0グッド

2クリップ

投稿2014/10/06 15:00

CoffeeScriptの関数定義 の->と => の違いがよく分かりません。
どのように使い分ければよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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)となっている所のthisWindowオブジェクトを指すためです。

まとめると、=>その位置でのthisを使いたい->もともとのJavaScriptのルールに従ったthisを使いたいということになります。

投稿2014/10/09 02:25

JohnSmith

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dboyaji

2014/10/14 05:18

回答ありがとうございました。 詳しく説明して頂いたので、理解することが出来ました!!
guest

0

JavaScriptでthisは関数が所属しているオブジェクトを指します。
関数内でコールバック関数を使う場合、
コールバック関数内部ではthisの値は失われてしまいます。
これを避けるため、=>(ファットアロー)を使います。
コールバック関数を => で関数定義をすると、コールバック関数内でthis のプロパティを参照できるようになり
便利です。詳しくは関数バインディングで検索するとよいと思います。

投稿2014/10/08 07:30

the_8ight_man

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問