1- JavaScript Training
2- ===================
1+ 2日でできる JavaScriptTraining
2+ ==============================
33
44JavaScript 初心者が JS の未来を見据えつつ、
55基礎をひととおり身に付けるための資料です。
66
77
8+ この README は ` npm run presentation ` で
9+ 再生することができます。
10+
11+
812
913セットアップ
1014------------
@@ -26,6 +30,8 @@ JavaScriptTraining リポジトリを fork します。
2630
2731画面右上にある fork ボタンを押してください。
2832
33+ [ <img src =" http://mixi-inc.github.io/JavaScriptTraining/images/fork-button.png " height =" 300px " style =" background-color : white " >] ( http://mixi-inc.github.io/JavaScriptTraining/images/fork-button.png )
34+
2935
3036### 3. 必要なものをダウンロード
3137
@@ -165,6 +171,8 @@ Web ページの適当な場所で
165171この Console から、JavaScript を
166172実行することができます。
167173
174+ [ <img src =" http://mixi-inc.github.io/JavaScriptTraining/images/console.png " height =" 300px " style =" background-color : white " >] ( http://mixi-inc.github.io/JavaScriptTraining/images/console.png )
175+
168176
169177### 3. 何か実行してみる
170178
188196```
189197
190198
191- ### 6. ブラウザオブジェクトをいじってみる
199+ ### 6. ブラウザオブジェクトをいじる
192200
193201ブラウザオブジェクトもいじってみましょう。
194202
@@ -242,12 +250,15 @@ JavaScript に精通していない人に
242250「どんなツールを使ったらいいですか?」と
243251聞かれることがよくあります。
244252
245- 私は、 「構文ハイライトと lint を使うといいですよ」、
253+ 私は「構文ハイライトと lint を使うといいですよ」、
246254と答えることにしています。
247255
248256[ <img src =" http://mixi-inc.github.io/JavaScriptTraining/images/syntax-error.png " width =" 600px " >] ( http://mixi-inc.github.io/JavaScriptTraining/images/syntax-error.png )
249257
250258
259+ ひとつエピソードを紹介します。
260+
261+
251262JavaScript には静的型検査がないことや、
252263記号が多い構文や、まずい仕様がいくつもあるので、
253264ミスを犯しやすい言語の一つです。
@@ -292,10 +303,10 @@ JavaScript には静的型検査がないことや、
292303なってしまっていたのでした。
293304
294305
295- このミスは 、いわゆる** 初見殺し** です。
306+ このエピソードは 、いわゆる** 初見殺し** です。
296307
297- 「何それどうしてそんな仕様なの😱 ; 」というのが
298- 正常なプログラマの反応だと思います 。
308+ 「何それどうしてそんな仕様なの😱 ; 」
309+ と言いたくなりますね 。
299310
300311
301312悲しいことに、このような落とし穴は
@@ -306,8 +317,10 @@ JavaScript の仕様・文化に数多く
306317防げるのでしょうか?
307318
308319
309- ESLint や JSHint、 JSLint のような lint を
310- 使いましょう。たとえば、ESLint を実行すると
320+ [ ESLint] ( http://eslint.org/ ) や [ JSHint] ( http://jshint.com/ ) 、 [ JSLint] ( http://www.jslint.com/ ) のような lint を
321+ 使いましょう。
322+
323+ たとえば、ESLint を実行すると
311324下のような警告が出されます。これによって、
312325潜在的な不具合をだいぶ減らせるようになるのです。
313326
@@ -404,19 +417,13 @@ var div = document.getElementById('foo');
404417```
405418
406419
407- 他にも CSS クラスやタグ名、
420+ 他にも CSS クラスやタグ名、その他の属性から、
421+ DOM 要素を取得することができます。
408422
409423``` html
410424<div class =" foo" >foo</div >
411425```
412426
413- その他の属性から、DOM 要素を取得することが
414- できます。
415-
416- ``` html
417- <a href =" foo" >foo</a >
418- ```
419-
420427
421428#### CSS セレクタについて
422429
@@ -676,8 +683,13 @@ click イベント以外にも多様なイベントがあります:
676683開発ツールを開き、Elements タブの中段にある
677684Event Listeners タブを開いてみてください。
678685
686+
679687[ <img src =" http://mixi-inc.github.io/JavaScriptTraining/images/chrome-dev-tool-event-debugging.png " height =" 300px " style =" background-color : white " >] ( http://mixi-inc.github.io/JavaScriptTraining/images/chrome-dev-tool-event-debugging.png )
680688
689+ たくさんのイベントが登録されていますね。
690+
691+ では、これらのイベントの使い方を解説していきます。
692+
681693
682694#### DOM イベント実装編
683695
@@ -721,7 +733,7 @@ button.addEventListener('click', function(event) {
721733```
722734
723735
724- しかし、AngularJS という最近の
736+ しかし、[ AngularJS] ( https://angularjs.org/ ) という最近の
725737フレームワークでイベント属性スタイルを
726738積極的に採用する動きもあります。
727739
@@ -752,10 +764,10 @@ button.addEventListener('click', function(event) {
752764<button ><img src =" icon.png" >Click me</button >
753765```
754766
755- この button 要素の click イベントを
767+ この button 要素の ` click ` イベントを
756768監視することを考えます。
757769
758- button 要素に addEventListener すればよいように
770+ button 要素に ` addEventListener ` すればよいように
759771見えますが、アイコン画像をクリックされた場合
760772どうなるのでしょうか?
761773
@@ -766,8 +778,11 @@ button 要素に addEventListener すればよいように
766778この仕組みが DOM イベントの伝搬です。
767779
768780
781+ [ <img src =" http://www.w3.org/TR/DOM-Level-3-Events/eventflow.svg " style =" background-color :white " height =" 500px " >] ( http://www.w3.org/TR/DOM-Level-3-Events/#event-flow )
782+
783+
769784` addEventListener ` の引数で
770- 1-2-4 か 1-3-4 を選べます 。
785+ 1-2-4 か 1-3-4 のどちらかを選べます 。
771786
7727871 . capturing フェーズ
773788
@@ -786,9 +801,6 @@ button 要素に addEventListener すればよいように
786801 リンクなどによる画面遷移がおこなわれる
787802
788803
789- [ <img src =" http://www.w3.org/TR/DOM-Level-3-Events/eventflow.svg " style =" background-color :white " height =" 500px " >] ( http://www.w3.org/TR/DOM-Level-3-Events/#event-flow )
790-
791-
792804先ほどのボタンの例では、img 要素の
793805click イベントは bubbling によって
794806button 要素まで通知されるのです。
@@ -820,6 +832,36 @@ button.addEventListener('click', function(event) {
820832非同期処理のトレーニング
821833
822834
835+ JavaScript の美しい機能のひとつに
836+ 非同期処理があります。
837+
838+ 下のコードは 1 秒まったあとに
839+ ` console.log(1) ` を実行するコードです。
840+
841+ ``` javascript
842+ setTimeout (function () {
843+ console .log (1 );
844+ }, 0 );
845+
846+ console .log (2 );
847+ ```
848+
849+ このコードを実行すると、` 1 ` と ` 2 ` の
850+ どちらか先に表示されるでしょうか。
851+
852+
853+ 答えは、` 2 ` です。` setTimeout ` に登録された
854+ 関数はいま実行途中のすべての関数が終了してから
855+ 呼び出されます([ JavaScriptのsetTimeoutを理解する] ( http://blog.mouten.info/2014/09/20/article/ ) )。
856+
857+ ここでは、関数を実行するタイミングを
858+ 後回しにすることによって、待っている間に
859+ 別のことができる、ということを覚えてください。
860+
861+ この待ち時間の間に別の処理を実行する
862+ やり方を非同期処理と呼びます。
863+
864+
823865#### サーバーとの通信
824866
825867非同期処理の代表例といえばサーバーとの通信です。
@@ -830,7 +872,7 @@ button.addEventListener('click', function(event) {
830872よって、時間を有効活用することが重要になります。
831873
832874
833- JavaScript にはサーバーと非同期に通信するための
875+ JavaScript にはサーバーと非同期に通信するための
834876API が用意されています。
835877
836878- [ fetch API] ( http://www.hcn.zaq.ne.jp/___/WEB/Fetch-ja.html )
@@ -1008,32 +1050,41 @@ JavaScript は言語機能としてモジュールの
10081050
10091051#### bower
10101052
1011- bower は、JavaScript、HTML、CSS等の、
1012- フロントエンドリソースのエコシステムです。
1053+ bower は、JavaScript、HTML、CSSなどを
1054+ 共有して使えるようにするフロントエンドの
1055+ エコシステムです。
1056+
1057+ 他の人が作ったモジュールを利用することや、
1058+ 自分が作ったモジュールを公開することも
1059+ できます。
10131060
1014- ただ、モジュールローディングの仕組みを
1015- もたないため、この部分は RequireJS などの
1016- 外部モジュールシステムに頼ることになります 。
1061+ ただ、JavaScript の場合モジュールの仕組みを
1062+ もたないため、この部分を RequireJS などの
1063+ モジュールシステムに頼ることになります 。
10171064どのモジュールシステムに対応するかという選択は、
10181065bower によって読み込まれるパッケージ側に
10191066裁量(責務)があります。
10201067
10211068
1022- これを、 [ 公式ドキュメント] ( http://bower.io/#getting-started ) は端的に
1069+ この方針を [ 公式ドキュメント] ( http://bower.io/#getting-started ) は端的に
10231070言い表しています。
10241071
10251072> How you use packages is up to you.
10261073>
10271074> (どのようにしてパッケージを使うのかはあなた次第です)
10281075
10291076
1030- bower の使い方は簡単です。
1077+ #### 実習
10311078
1032- bower で管轄したいファイルのディレクトリを開き、
1079+ まず、bower を実行することを体験してみます。
1080+ bower の設定ファイル bower.json を対話的に
1081+ 作成します。
10331082
1083+ cd public/stage6/sample
10341084 bower init
10351085
1036- です。あとは説明に従って選択していくと、bower の
1086+
1087+ あとは説明に従って選択していくと、bower の
10371088パッケージ設定ファイル ` bower.json ` が作成されます。
10381089
10391090
@@ -1154,36 +1205,33 @@ y でレジストリへの公開ができないように設定します。
11541205
11551206##### bower install
11561207
1157- あとは、使いたいモジュールを追加していきます
1158- (` --save ` はパッケージ設定に依存ファイルを
1159- 追記する効果があります)。
1208+ いよいよ、パッケージを追加していきます。
11601209
1161- bower install --save fetch
1162-
1163- このコマンドによって、fetch パッケージが、
1164- ` bower_components ` 以下に配置されます。
1210+ パッケージは [ Search Bower packages] ( http://bower.io/search/ ) で
1211+ 検索することができます。
11651212
1166- また、ここで設定に記載されたモジュールは、
1167- ` bower install ` で取得することが
1168- できるようになります。
11691213
1214+ では、試しに [ Buttons] ( https://github.com/alexwolfe/Buttons ) パッケージを
1215+ 追加してみましょう。
11701216
1171- 今回は、簡単のために script タグで直接
1172- ` bower_components ` 以下の JavaScript/CSS を
1173- 読み込みます。
1217+ 下のコマンドによって、Buttons パッケージが、
1218+ ` bower_components ` 以下に配置されます。
11741219
1220+ bower install --save Buttons
11751221
1176- パッケージは [ Search Bower packages] ( http://bower.io/search/ ) で
1177- 検索することができます。
11781222
1223+ ` --save ` はパッケージ設定に依存ファイルを
1224+ 追記する効果があります(` bower.json ` の
1225+ 内容が変化しているので、見てみてください)。
11791226
1180- #### 実習
1227+ ここで設定に追記されたパッケージは、
1228+ 次回から ` bower install ` でまとめて
1229+ 取得することができるようになります。
11811230
1182- まず、bower を実行することを体験してみます。
11831231
1184- cd public/stage6/sample
1185- bower init
1186- bower install Buttons
1232+ 今回は、簡単のために script タグで直接
1233+ ` bower_components ` 以下の JavaScript/CSS を
1234+ 読み込みます。
11871235
11881236
11891237今回の実習はテスト駆動形式ではありません。
@@ -1198,13 +1246,13 @@ y でレジストリへの公開ができないように設定します。
11981246
11991247### ステージ7
12001248
1201- よくあるイディオムを読み書きするトレーニング
1249+ よくあるイディオムを読むトレーニング
12021250
12031251
12041252このステージでは、よくある JavaScript の
12051253不思議な書き方を学びます。
12061254
1207- なお、今回はヒントがありません!
1255+ なお、今回はヒントがありません!
12081256ぜひ自分で調べて、結果を確かめてみてください!
12091257
12101258
0 commit comments