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

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

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

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

まず例を。

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

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

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

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

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

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です