tddjs > 引数もローカル変数なので自由変数
by s_hiroshi
JavaScript
// 外側関数の引数もローカル変数なので
// クロージャーは引数を参照できる。
function foo(value) {
return function() {
value = value * 2;
return value;
};
}
var c = foo(2);
console.log(c()); // 4
console.log(c()); // 8
console.log(c()); // 16
// クロージャーを使って外部から変更できない変数(外側の引数)を作る
function bar(value) {
return function() {
return value;
};
}
var d = bar(5);
console.log(d()); // 5
d.value = 50; // d関数への新たなプロパティvalueを設定することになりbarの引数valueは変更されない。
console.log(d()); // 5
// getValueはクロージャーになりvalueにアクセスできる
function baz(value) {
function getValue() {
return value;
}
var o = {
_get: getValue
};
return o;
}
var e = baz(10);
console.log(e._get()); // 100
e.value = 1000; // 外部からはbarの引数valueを直接操作できない。
console.log(e._get()); // 100 特権メソッド_getで参照。