이 코드로 :
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();
}
baz();
이 예기치 않은 결과가 나타납니다.
코드를 변경하면 :
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();
}
예상 결과를 얻습니다.
또한 eval
내부 함수 내에 호출이 있으면 원하는대로 변수에 액세스 할 수 있습니다 (전달하는 대상은 중요하지 않습니다 eval
).
한편, Firefox 개발 도구는 두 상황 모두에서 예상되는 동작을 제공합니다.
Chrome에서 디버거가 Firefox보다 편리하게 작동하지 않는 것은 무엇입니까? 버전 41.0.2272.43 베타 (64 비트)를 포함하여 한동안이 동작을 관찰했습니다.
Chrome의 자바 스크립트 엔진이 가능한 한 기능을 "평평하게 만드는"것입니까?
I는 제 2 가변 흥미롭게 경우 추가 되어 내부에서 참조를 함수의 x
변수는 아직 정의되지 않는다.
대화 형 디버거를 사용할 때 범위와 변수 정의가있는 단점이 있음을 이해하지만 언어 사양에 따라 이러한 단점에 대한 "최상의"솔루션이 있어야합니다. Chrome이 Firefox보다 더 최적화되어 있기 때문에 궁금합니다. 또한 개발 중에 이러한 최적화를 쉽게 비활성화 할 수 있는지 여부 (개발 도구가 열려있을 때 비활성화해야합니까?)
또한 debugger
문장 뿐만 아니라 중단 점으로 이것을 재현 할 수 있습니다 .
debugger;
라인이 실제로 inside에서 호출되지 않았다고 말합니다 bar
. 따라서 디버거에서 일시 중지 될 때 스택 추적을 살펴보십시오. 스택 추적에 bar
함수가 언급되어 있습니까? 내가 옳다면, 스택 트레이스는 라인 (9)에서, 7 호선에서 5 호선에서 일시 정지 있어요 말해야한다
temp1
가 콘솔에 연결되며이를 사용하여 범위 항목에 액세스 할 수 있습니다.