У меня есть локальная переменная таблицы в функции и дочерняя функция, которая должна иметь переменную с тем же именем, сохраняя при этом доступ к переменной родителя. Это должно быть очевидно и просто, но, к сожалению, 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
Что там происходит? Есть ли способ обойти это?
Почему у этого должно быть одноименное имя? Можете ли вы получить доступ к окну.p или независимо от эквивалента узла, если вы используете узел? Во всяком случае, переменный подъем. –