technical note

リヴィーリングモジュール

以下についてダラダラと書いています

  • クロージャー ←とは何かについてはかいていない
  • リヴィーリングモジュール

技術的なことはなんも書いてないです。ただの日記です。

こんげつは、

  • 家政婦
  • ピアノ
  • 英語
  • 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のクロージャーの節にでてきた言葉なのですが、

  • 関数と変数をプライベートスコープ内で定義する
  • パブリックメンバとして公開したいプライベートメンバへのポインタを持つ無名オブジェクトを返す

という、デザインパターンのうちのひとつみたい。

 

-technical note