関数にローカル テーブル変数があり、同じ名前の変数を持つはずの子関数がありますが、親の変数にはアクセスできます。これは明白で簡単なはずですが、残念ながら、どこかに同じ名前のローカル変数を定義すると、JavaScript では親の変数にアクセスできません。
var p = {alpha : 'beta'};
console.debug (p);
// [08:16:21.896] ({alpha:"beta"})
// Okay.
(function() {
console.debug (p);
// [08:16:21.896] ({alpha:"beta"})
// Right! JavaScript, you're so awesome!
})();
// One moment though, I think I still need the parent's table...
(function() {
var p = { 'p': p };
console.debug (p);
// [08:16:21.896] ({p:(void 0)})
// Wait, what?
})();
// Okay, maybe giving it the same name in the same statement confuses you?
(function() {
var parent_p = p;
var p = {};
console.debug (parent_p);
// [08:16:21.897] undefined
})();
// Give me back my variable! http://v.gd/jsWhyDoYouDoThis
何が起こっているのですか?これを回避する方法はありますか?