コンパイラかく語りき

import { Fun } from 'programming'

JSライブラリ「Underscore.js」を読んでJavaScript中級者になる! ~アンダースコアをグローバルオブジェクトとしてセットする~

どうも!chuckです。

Underscore.jsを読んでいきます。

 

chuckwebtips.hatenablog.com

 

 

今回読むのはこの箇所。

f:id:chuck0523:20150909212749p:plain

コメントによると、Node.jsのために、後方互換性を考慮した記述っぽい??

 

デバッグを仕込んで、処理の流れを確認してみます。

f:id:chuck0523:20150909213054p:plain

 

コンソールを見るとこの通り。

f:id:chuck0523:20150909213134p:plain

Cが表示されているので、if文のelseに入っていることが分かります。

 

では、もう少しif文について見ていきます。

f:id:chuck0523:20150909213221p:plain

 

if文が2重になっていますね。

exports と module 、module.exportsという3つの変数?が条件文に入っています。

それぞれ表示させてみます。

f:id:chuck0523:20150909213531p:plain

 

結果はこのとおり。

f:id:chuck0523:20150909213550p:plain

「そんな変数はないよ」とのこと。

 

exportsやmoduleについて調べてみました。

d.hatena.ne.jp

 

f:id:chuck0523:20150909213824p:plain

うーん、分からない…w

まあ、Node.jsがなんちゃらということらしいです。今度はNode環境で実行してみます。

f:id:chuck0523:20150909213930p:plain

 

なんか出ました!

f:id:chuck0523:20150909213936p:plain

 

ふむふむ、Nodeのための記述なんですね。でも今回はブラウザでの処理に集中します。

 

ブラウザだとこの処理が行われるわけですね。

f:id:chuck0523:20150909214122p:plain

rootはグローバルオブジェクトを格納しているので、この記述はアンダースコアをグローバルオブジェクトに追加しています!

 

コンソールで確認。

f:id:chuck0523:20150909214334p:plain

代入の前後の状態を表示してみます。

 

おお!たしかに、undefinedからfunctionへと代入が行われています。アンダースコアには関数が格納されていましたね。

f:id:chuck0523:20150909214349p:plain

 

というわけで、今回はとっても大切なアンダースコアのセットについて見ていきました。

ブラウザとNodeだと扱いが異なるということを発見しました。

 

 

コードリーディングの記録を公開中!

github.com