自宅でお小遣い稼ぎをしたい主婦がアプリリリースを目指すブログです。この広告は、90日以上更新していないブログに表示しています。->と=>の違いこんにちは、マリンです。祝!令和!!無事新しい時代が幕を開けましたね!私も怒涛の長女卒園からの入学が終わって一安心です。令和の時代も平和が続きますように!そしてスキルアップできますように!!さて、令和元年一発目の投稿は、CoffeeScriptの=>(ファットアロー)についてです。名前初めて知りました。先輩のコードを読んでいて頻繁に出てきたため勉強してみました。ファットアローとは?thisを保持するとは?->と=>の違いまとめファットアローとは?ファットアローとは、CoffeeScriptにおける関数定義の方法の一つです。現在のthisを、定義した関数の中でも保持することができるというシロモノです。?という感じだったので詳しく調べました。thisを保持するとは?そもそもthisとは、呼び出す場所や方法によってその中身が変わる特殊な変数です。構文やオプション設定などもなく、単体でどこでも呼び出すことが可能です。CoffeeScriptにおいては、@で表します。中身が変わってきます。...}上記では呼び出す場所によってthisの中身が変わっていることを検証しています。自身のクラスをthisに格納しているようです。そのfuncの中で呼び出している即時関数のthisにはWindowが入っています。「thisが保持されていない」状態ですね。コールバック関数やイベントハンドラの中ではthisがその対象だったりしますが、これが保持されていない状態です。{}今度はfuncの中で、即時関数を実行する前に@をthatという変数に入れてみました。即時関数ではこのthatを出力するようにしています。すると、実行結果がfuncと即時関数で同じになりましたね。これが「thisを保持する」という状況です。thisなど変数に格納することによって保持するようです。(格納する変数名はthatもしくはselfが慣習となっています。)このthisを保持するための変数格納の処理を自動的に行いつつ関数宣言するのが=>(ファットアロー)です。先程の例を使って->と=>の違いを見てみます。{}->(アロー?でいいのかな)の方の即時関数は、最初の例と同じように、thisが保持されることなくWindowが格納されています。変数を定義することなくthisが保持されていることがわかります。これが->と=>の関数定義の違いです。ちなみにこの2つがどのようにコンパイルされているか見てみましょう。pages.func();10~12行目が->の部分、14~18行目が=>の部分です。見づらいですが、=>の方は即時関数に_thisを渡し、それを元に無名関数を呼び出しています。thisの代わりのような役割になっているようです。即時関数の実引数にMyObjでのthisが渡されていますね。まとめ->と=>はともにCoffeeScriptにおける関数定義の方法で、2つの違いは、関数定義前のthisを保持するか否か?ということでした。今回の大型連休のおかげで一つ謎が解けました。〜式展開の色々〜こんにちは、マリンです。»プロフィールid:song-of-life1352607アラサーで思い立ってプログラミングを始めた主婦が、自宅でお小遣い稼ぎをしたいがために自作アプリのリリースを目指すブログです。【Git】ブランチ間違えてコミットしてた!?月別アーカイブ参加グループプログラミングはてなブログをはじめよう!song-of-life1352607さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。