Вызов переменных, определенных во внешней функции, из внутренней функции с помощью отладчика
ИзJQuery Документы Руководство по JavaScript:
Поскольку локальная область работает через функции, любые функции, определенные в другой, имеют доступ к переменным, определенным во внешней функции:
function outer() {
var x = 5;
var y = 2;
function inner() {
console.log( x );
debugger; // <-- !!!
}
inner();
}
outer()
Консоль запускается сdebugger
:
> x
5
> y
ReferenceError: y is not defined
Поскольку переменные определены вouter
функция может быть использованаinner
функция (например,x
или жеy
), почему отладчик не может вызватьy
переменная?
Я подозреваю, что люди ответят, что отладчик показывает только переменные, определенные в самой внутренней / локальной области видимости. Причиной этого является то, что в противном случае нельзя было бы провести различие с использованием отладчика между внутренней и внешней областью действия при проверке переменной с использованием отладчика во внутренней функции. Кроме того, каждая переменная, определенная во внешней области, которая выполняется во внутренней области, позволяет отладчику получать к ней доступ.
Ноесли это такне существует ли способа по-прежнему вызывать переменнуюy
из консоли внутри внутренней функции? (используя обозначение, относящееся к области видимости, например,outer.y
)
Очевидно, что это поведение отладчика не ограничивается JavaScript. Отладчик Pythonpdb
например ведет себя аналогично:
def outer():
x = 5
y = 2
def inner():
print x
import pdb; pdb.set_trace()
inner()
outer()
(Pdb) x
5
(Pdb) y
*** NameError: 'y' is not defined