Wywoływanie zmiennych zdefiniowanych w funkcji zewnętrznej z funkcji wewnętrznej za pomocą debugera
OdjQuery docs javascript guide:
Ponieważ zasięg lokalny działa poprzez funkcje, wszelkie funkcje zdefiniowane w innym mają dostęp do zmiennych zdefiniowanych w funkcji zewnętrznej:
function outer() {
var x = 5;
var y = 2;
function inner() {
console.log( x );
debugger; // <-- !!!
}
inner();
}
outer()
Konsola uruchomiona za pomocądebugger
:
> x
5
> y
ReferenceError: y is not defined
Ponieważ zmienne zdefiniowane wouter
funkcja może być używana przezinner
funkcja (np.x
luby
), dlaczego debuger nie może wywołaćy
zmienna?
Podejrzewam, że ludzie odpowiedzą, że debuger pokazuje tylko zmienne zdefiniowane w najbardziej wewnętrznym / lokalnym zakresie. Powodem tego jest to, że w przeciwnym razie nie można dokonać rozróżnienia między debuggerem między wewnętrznym i zewnętrznym zakresem podczas sprawdzania zmiennej za pomocą debugera w funkcji wewnętrznej. Dodatkowo, każda zmienna zdefiniowana w zewnętrznym zakresie, który jest wykonywany w wewnętrznym zakresie, pozwala na dostęp do debuggera.
Alejeśli tak jest, czy nie ma sposobu, aby nadal nazywać zmiennąy
z konsoli wewnątrz funkcji wewnętrznej? (używając notacji uwzględniającej zakres, np.outer.y
)
Najwyraźniej to zachowanie debuggera nie ogranicza się do javascript. Debuger Pythonapdb
na przykład zachowuje się podobnie:
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