例1. TypeScript
引数に function を渡す。
二回目以降の呼び出しでは、引数の function、またはその引数(ここでは data
)にアクセス出来ない状況を想定。
定義
type ValidationResponse = {
valid: boolean
errors: string[]
}
const validator = (
validatorFn?: () => ValidationResponse
): ValidationResponse => {
if (!validator.result['cached'] && validatorFn) {
validator.result['cached'] = validatorFn()
}
return validator.result['cached']
}
validator.result = {}
呼び出し
// 一度目
// 引数(validatorFn)を渡す。
const { valid } = validator(() => validatorFn(data))
// 二度目
// 引数(validatorFn)を渡さない。
const { errors } = validator()
例2. JavaScript
var myFunc = function (param) {
if (!myFunc.cache[param]) {
var result = [];
// 重たい処理
myFunc.cache[param] = result;
}
return myFunc.cache[param];
};
// キャッシュ
myFunc.cache = {};
※ JavaScriptパターン p79 より引用。