Javascript 为什么Chrome开发工具说变量没有定义?
在下面的代码中,当在断点处暂停时,Chrome开发工具会告诉我“foo”是否定义,这取决于console.log行是否被注释掉 到达断点后,如果在控制台中键入“foo”,或将其作为监视变量添加,如果控制台语句被注释掉,则会说foo未定义,但是如果控制台语句未被注释掉,则会正确显示foo(1)的值。 为什么会这样Javascript 为什么Chrome开发工具说变量没有定义?,javascript,google-chrome,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Devtools,在下面的代码中,当在断点处暂停时,Chrome开发工具会告诉我“foo”是否定义,这取决于console.log行是否被注释掉 到达断点后,如果在控制台中键入“foo”,或将其作为监视变量添加,如果控制台语句被注释掉,则会说foo未定义,但是如果控制台语句未被注释掉,则会正确显示foo(1)的值。 为什么会这样 函数func1(){ 设foo=1; var func2=函数(){ 函数func3(){ 设foo2=4; //把断点放在这里 设foo3=5; //console.log(foo)
函数func1(){
设foo=1;
var func2=函数(){
函数func3(){
设foo2=4;
//把断点放在这里
设foo3=5;
//console.log(foo);//当这行注释时,表示foo未定义
}
func3();
}
func2();
}
func1()代码>chrome调试器在捕获变量方面有细微差别
由于您的内部func3
没有引用foo,因此在调试器内部,您将无法控制台记录它-即使您编写了真正的代码,它也可以工作
试试这个:
function func1(){
let foo = 1;
var func2 = function (){
function func3 (){
let foo2 = 4;
foo; // Note that I'm just referencing the variable, not doing anything with it
// put breakpoint here
let foo3 = 5;
// console.log(foo); //says foo is undefined when this line commented
}
func3();
}
func2();
}
func1();
只需添加foo代码>到内部函数,现在调试器将使您可以使用它。您的“回答”意味着这是一个特定于chrome的问题。“如果我没弄错的话”-这在所有浏览器中都会发生…@SethMcClaine根据相关问题中的海报,在Firebox中,调试器的行为与预期一致,并且调试器可以看到变量,即使没有实际代码引用它。@SethMcClaine AFAIK这是特定于chrome的debugger@wOxxOm是的,这就是问题所在!谢谢