Ничего себе, действительно интересно!
Как уже упоминалось, это, по-видимому, связано с scope
, но более конкретно, связано с debugger scope
. Когда внедренный скрипт оценивается в инструментах разработчика, он, как представляется, определяет ScopeChain
, что приводит к некоторой причудливости (поскольку оно связано с областью инспектора / отладчика). Вариант того, что вы разместили, это:
(EDIT - на самом деле, вы упомянули об этом в своем исходном вопросе, yikes, мой плохой! )
function foo() {
var x = "bat";
var y = "man";
function bar() {
console.log(x); // logs "bat"
debugger; // Attempting to access "y" throws the following
// Uncaught ReferenceError: y is not defined
// However, x is available in the scopeChain. Weird!
}
bar();
}
foo();
Для амбициозного и / или любопытного масштаба (heh) из источника, чтобы узнать, что происходит:
https://github.com/WebKit/webkit/tree/master/Source / JavaScriptCore / inspector https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/debugger