Edited at

JavaScript初心者脱却への道のりを考える

More than 3 years have passed since last update.

最も誤解されているプログラム言語として名高いJavaScriptの誤解を解きつつ、中級者(プログラム開発においてある程度戦力として計算できる)になるためには何から抑えればいんだろう、というのを考えた記録とリンク集です。

考えたというか、自分が勉強中です。

※追記

KENJUさんが完全に上位互換な内容の投稿を公開されていましたので紹介。

中上級者になるためのJavaScript【知識編】


対象


  • 何かしらのプログラム言語は書ける

  • 多少JavaScriptを書いたことはあれど、言語の仕様はよく知らない


レベルの基準

中級ってどんな人なのさ?


JavaScriptの業務スキルレベル 判別表 (5段階)

あなたはJavaScriptを知らない



  • JavaScriptでよく使われるクロージャやプロトタイプの考え方を理解すること

  • 代表的なライブラリ(jQueryとか)が使えること、最近ならNode.jsなんかも触れること

  • AjaxやDOM操作などができること

などが挙げられるのかなという感じです。

今回は1.のJavaScript自体の部分に絞ります。


項目を挙げてみる


スコープを理解する


  • レキシカルスコープであること/関数単位のスコープであること

  • ホイスティング(巻き上げ)により見た目と実際の変数定義タイミングがずれる場合があること

  • スコープを制限するために即時関数で囲むと良い場合も。(function(){})();←これ。


JavaScript のスコープを理解する

JavaScriptのスコープ

関数の場合の変数の巻き上げ問題について



クロージャを理解する


  • クロージャの作り方がわかる

  • 使いどころがイメージできる


    • プライベートな情報を保持した関数オブジェクトができる

    • イベントリスナの生成などが効率よくできる




JavaScriptでクロージャ入門

私が今までクロージャを理解できなかった理由



thisの扱い理解する


  • 場合によってthisが指す部分が変わることを理解する


JavaScriptの「this」は「4種類」??

JavaScript の this を理解する



apply,callの動きを理解する


  • (上記thisにも関連しますが) apply,callによりthisが書きかえられることを理解する

  • classベースのオブジェクト指向と違って、データと関数を切り離す考え方も身につける


Javascriptのcall/apply関数のプロっぽい使い方 〜 JSおくのほそ道 #014

javascriptのapplyとcallを理解する

必殺の .apply()フックを打つべし! 打つべし!



プロトタイプを理解する


  • 共通で利用する関数はprototypeに宣言する

  • prototypeによってオブジェクト同士の結びつき(継承チックな)ができることを理解する

  • プロトタイプチェーンの考え方を理解する


JavaScriptの「プロトタイプ入門」

JavaScript初級者から中級者になろう - 九章第三回 継承



関数型言語の特性を取り入れる

JavaScript独自というわけではないですが、、、


イテレーションメソッド


  • 配列に対する操作で、ループで1つずつ処理しなくても効率良く処理できる場合があることを理解する


JavaScriptのイテレーションメソッドまとめ(forEach,map,reduce…)


※追記 2016/1/11

イテレーションメソッドの記事書きました

イテレーションメソッド活用:テーブルを集計しよう


カリー化・部分適用


  • " 複数の引数が必要な関数"を"1引数関数の連続"であらわすカリー化

  • それにより一部の引数を固定して新たな関数を作る部分適用が容易になること


食べられないほうのカリー化入門

カリー化と部分適用(JavaScriptとHaskell)



まとめ

このあたりから抑えていけばいいんじゃなかろうか、というところをまとめました。

まずは「おや?見た目に反してCやJavaとはなんだか違うぞ?」というところからスタートかなと思います。

突っ込みどころ満載の内容かもしれません。「違うぞー」とか「もっと必要なことあるぞー」というご指摘がありましたらぜひお願いします。

追加や修正は随時行っていきたいと思います。