以下についてダラダラと書いています
- クロージャー ←とは何かについてはかいていない
- リヴィーリングモジュール
技術的なことはなんも書いてないです。ただの日記です。
こんげつは、
- 家政婦
- ピアノ
- 英語
- Flutter
- Python(pandas)
- Go
とかやっていて、どれも初学者レベルですが、いいの趣味だから!とか言い聞かせながら、本日もTypeScript再入門でちょっとクロージャーなんかを写経しました。
なんでそんなことをはじめたのか、ということをだらだら書いていたら、職場の愚痴みたくなってしまったので削除した。
業後に TypeScript Deep dive これをナナメよみしてて、(どの言語にもたいていあるとは思いますが)クロージャーってなんだっけ?となったので、Playground で写経しました。クロージャーもわからんのかい・・とか思われてもいいのです。過去に何度もおさらいしてるけど(先月もFlutterだかGoでやった気がする・・)、ふだん使わないのですぐ忘れる。
いい加減、恥を晒してブログに書けば、もー忘れまい・・と思って書きました。
typoもしている写経コード
function outerFunction(arg) { var variableInOuterFunction = arg; function bar() { console.log(variableInOuterFunction); } bar(); } outerFunction("Hello closure") function outerFunction2(arg) { var variableInOuterFunction = arg; return function () { console.log(variableInOuterFunction); } } var innerFunction = outerFunction2("Hello clouser!!!"); innerFunction(); // revealing module pattern function createCounter() { let val = 0; return { increment() { val++ }, getVa() { return val } } } let counter = createCounter(); counter.increment(); console.log(counter.getVa()); counter.increment(); console.log(counter.getVa()); counter.increment(); console.log(counter.getVa());
ふむふむ。プライベートな関数をオブジェクトにして、外から実行できるのね、とみた。
リヴィーリングモジュール
deep diveのクロージャーの節にでてきた言葉なのですが、
- 関数と変数をプライベートスコープ内で定義する
- パブリックメンバとして公開したいプライベートメンバへのポインタを持つ無名オブジェクトを返す
という、デザインパターンのうちのひとつみたい。