Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Chrome开发工具说变量没有定义?_Javascript_Google Chrome_Google Chrome Devtools - Fatal编程技术网

Javascript 为什么Chrome开发工具说变量没有定义?

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)

在下面的代码中,当在断点处暂停时,Chrome开发工具会告诉我“foo”是否定义,这取决于console.log行是否被注释掉

到达断点后,如果在控制台中键入“foo”,或将其作为监视变量添加,如果控制台语句被注释掉,则会说foo未定义,但是如果控制台语句未被注释掉,则会正确显示foo(1)的值。 为什么会这样

函数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是的,这就是问题所在!谢谢