
110
4 章 高階関数
保され、その関数が呼ばれる度に操作されます。これはうまく動きそうです。しかし
これと同じ機能をオブジェクトを使って実現できないでしょうか? 例えば、
var generator = {
count: 0,
uniqueString: function(prefix) {
return [prefix, this.count++].join('');
}
};
generator.uniqueString("bohr");
//=> bohr0
generator.uniqueString("bohr");
//=> bohr1
この方法は、(そもそも関数型スタイルではないという事実とは別に)あまり安全で
はないという弱点があります。
// count
プロパティに値を再代入
generator.count = "gotcha";
generator.uniqueString("bohr");
//=> "bohrNaN"
//
動的にバインド
generator.uniqueString.call({count: 1337}, "bohr");
//=> "bohr1337"
ここまでの操作であなたのシステムは危険な状態に陥っています。
makeUnique
StringFunction
を構築するために使われたアプローチでは、
COUNTER
のインスタンス
は外部から覗かれないように隠蔽されています。つまり、
COUNTER
変数は返されるク
ロージャのプライベート変数ということです。私はプライベート変数かオブジェクト ...