thisを出力してみた

こんばんは、有村です!
今回はふと気になったのでこれを実践してみました!!

thisを出力してみた

です!
よくJSerの先輩から、「thisがそいつ自身を指すのはjQueryだから」と聞いていましたが、
じゃあjQueryではない生のJavaScriptだと何を指すんだろう…と疑問に思った次第です。

ただ、「どういう仕組みなん?」というところまでは理解が追いつかなかったので、
そこに関しては全く意味をなさない記事だと思います…。あくまで備忘録で。

さっそく実践。

その結果はというと…

わー!Windowって出た!
window…グローバルオブジェクトですね。
「これ」を指すのだから、「hoge」自身が返ってくると予想したのですが…(jQuery信者)

じゃあこういったケースはどうなるんでしょうか…

実行すると、なんと!!

と出ます!
thisの向き先が変わりました!!

なんとな〜く、こういうこと?と感覚で掴んでいることとしては、
hogeはグローバル(window)に属していて、fugaはインスタンスとして作成された時点でhogeに属しているのかな?
thisはその属しているものを向き先として設定されているのかな?という。

調べてみると、プロトタイプあたりとも密接に関係してそうなので、それはそれで後日ちゃんと理解したいです。

なんだか感覚値が高い記事になってしまいましたが、備忘録ということで(2回目)
それでは、きょうはこのへんで。

クロージャって何ができるの?

こんばんは、有村です!
前口上が思いつかないのでそのまま本題に入ります!

今回のテーマは、
クロージャって何ができるの?
です!!

なんとな〜く言葉は知っていても、「こう使う!」「ここで使う!」という実践方法が分からなかったので、
今回まとめてみることにしました。

まず例を。

(分かりやすいようにscriptタグを分割しています)
ほげ2を実行すると、何度押しても2・2・2・2……とアラートが出るのですが、
ほげ1を実行すると、押すたびに2・3・4・5……と1つずつ数字が進んでいくんです!

ぱっと見では「hogeを呼んでるけど、結果としてfugaを実行している」という点は変わらないですよね…。
ただ、前者は
関数fugaをreturnで返している
関数hogeを変数に格納している
関数hogeを格納した変数を実行している
という点に違いがあります!

なんでそうなるねんは置いておいて、この記述をすることによって、
通常の記述では保持しないはずのローカル変数「no」の状態(=数)を閉じ込めておくことができるのです!

どのような場面で使うか考えると、カウンタ系とかでしょうか。
「いま◯回クリックしましたよ」とか。
もっと見る機能など、クリック回数をキーとするものに対して有効に使えそうです。

しかし、ローカル変数をそのまま閉じ込めておけるということは、その分変数を保持するためのメモリを割いているということになります。
(通常であればガベージコレクションで破棄される)
昨今の環境では使えるメモリも増えているので大した問題にはならないと思うのですが、
「メモリ領域を食ってるんだぞ〜」という点は覚えておくに越したことはないかなと!

それでは、きょうはこのへんで。

expectって便利だね!

こんにちは、有村です!
寒くなりましたね、冬ですね!!

さて今日は、「expectって便利だね!」がテーマです!
翻訳すると「期待」になりますが…いったい何を期待するんだ……

私の場合、会社のサーバに自宅から繋ごうとする際にシェルを実行するんですけど、それは

みたいな内容で書いていたんですよね。
そうすると、

と毎回パスワードを聞かれる。そして打つ。そう、毎回。

このパスワードはその度に異なるのかというとそうではなく、固定。
つまり、変化するのはIPだけなので、自分で入力するのもIPだけにしたかったんです。

何が起こっているのかと流れを追うと、
1. シェルで接続しようとする
2. 相手が「パスワードはなに?」と聞いてくる
3. パスワードを答える
4. 繋がる
ですね。
2と3は、「聞かれて答える」ということから対話形式と言うそうです。

毎回パスワード打つの面倒やんな〜と愚痴ってたら、「じゃあこれあげる」と素敵なシェルをいただきました!
それは…

というもの!

先ほどのシェルとの違いは、
・パスワードが定数になってる
expectっていうのが出てきた!
が大きいと思います!

spawnは、expect内で使える「プロセスの生成」です。
SSH接続のプロセスを開始するよ〜と言ってるんですね!

で、上に出てきたexpectが今回のポイントで、こいつは「マシンからの応答(対話)を読み取ってくれるやつ」です!

は、ダブルクォートで囲まれた部分を自動対話処理するよということ。
また、

では、「passwordを聞かれる」という対話の読み取りが期待されているんですね!

sendは、文字列を送信するコマンド。
つまり、「パスワードくれくれ」に対して、「これやで〜」と自動的に答えを返してくれているんです!

interactは、対話の終了。もうおしまいということ。

ほぉ〜!聞かれることが既に分かっているなら、expectを活用したほうが断然便利ですね!
私の場合はパスワードだけだからよかったものの、もっと複雑なことをやろうとすると、
「何回対話させんねん」ってくらい打ち込む項目が増えたりしそうですし…

それでは、きょうはこのへんで。