Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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

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_Debugging - Fatal编程技术网

Javascript 为什么Chrome不允许在调试中更改变量

Javascript 为什么Chrome不允许在调试中更改变量,javascript,google-chrome,debugging,Javascript,Google Chrome,Debugging,我在Chome devtools下一个代码中运行 (function() { var a = 5; debugger; // when I stop here I evaluate `a = 9` console.log(a); })(); // and got 5 但是如果我使用 (function() { var a = { a: 5 }; debugger; // when I stop here I evaluate `a.a = 9` console.log(

我在Chome devtools下一个代码中运行

(function() {
  var a = 5;
  debugger; // when I stop here I evaluate `a = 9`
  console.log(a);
})(); // and got 5
但是如果我使用

(function() {
  var a = { a: 5 };
  debugger; // when I stop here I evaluate `a.a = 9`
  console.log(a.a);
})(); // and got 9
为什么?

PS
还有为什么它在FF/Safari中不起作用?它甚至没有在调试器行中停止,这是变量如何使用的问题。对象通过引用使用。因此,更改a.a将有效地更改正确内存地址处的值。不过,在任何测试版本中更改a本身都不会起任何作用,因为会为控制台中计算的变量创建一个新的内存地址


对于未在调试器行中断的FireFox,它在本页中声明:如果没有可用的调试功能,则此语句无效。。因此,我想您必须确保安装了FireBug。

这是如何使用变量的问题。对象通过引用使用。因此,更改a.a将有效地更改正确内存地址处的值。不过,在任何测试版本中更改a本身都不会起任何作用,因为会为控制台中计算的变量创建一个新的内存地址

对于未在调试器行中断的FireFox,它在本页中声明:如果没有可用的调试功能,则此语句无效。。因此,我想您必须确保安装了FireBug。

这是行为,将在即将发布的版本中修复

如果您想了解更深入的原因,您需要了解很多关于Chrome调试器和JavaScript实现的知识。根据,调试器以前使用上下文构建器.native\u上下文,但现在使用上下文构建器.evaluation\u上下文。显然,由旧调试器代码创建的本机_上下文在解析或不作为只读局部作用域变量处理时遇到问题。如果您真的想要更多,可以联系修复程序的作者

至于为什么调试器没有出现在Firefox中:如果您正在运行来自的代码并打开了开发工具,调试器就会出现。从控制台运行代码时,似乎必须打开“调试器”选项卡。显然,如果打开控制台以键入代码,这是不可能的,但可以将其包装在setTimeout中并快速切换到Debugger选项卡:

setTimeout(function() { debugger; }, 5000)
这就是行为,将在即将发布的版本中修复

如果您想了解更深入的原因,您需要了解很多关于Chrome调试器和JavaScript实现的知识。根据,调试器以前使用上下文构建器.native\u上下文,但现在使用上下文构建器.evaluation\u上下文。显然,由旧调试器代码创建的本机_上下文在解析或不作为只读局部作用域变量处理时遇到问题。如果您真的想要更多,可以联系修复程序的作者

至于为什么调试器没有出现在Firefox中:如果您正在运行来自的代码并打开了开发工具,调试器就会出现。从控制台运行代码时,似乎必须打开“调试器”选项卡。显然,如果打开控制台以键入代码,这是不可能的,但可以将其包装在setTimeout中并快速切换到Debugger选项卡:

setTimeout(function() { debugger; }, 5000)

当运行第二个示例时,我在console@NickD这似乎是一个问题,在版本35上已修复,但在版本49中已回归,我假设您正在使用的是版本49,并且将在版本52中修复。在firefox中,仅当调试器处于活动状态时才会停止,否则不会停止。@debugger;在FF中,在与Chrome相同的标准下,即开发工具处于打开状态,我似乎可以很好地工作。如果在FF中打开开发工具,脚本是否会暂停?在运行第二个示例时,我在console@NickD这似乎是一个问题,它在版本35上得到了修复,但在版本49中出现了倒退,我假设您使用的是版本49,并且将在版本52中得到修复。在firefox中,只有当调试器处于活动状态时才会停止,否则它不会停止。@调试器;在FF中,在与Chrome相同的标准下,即开发工具处于打开状态,我似乎可以很好地工作。如果你在FF中打开开发工具,脚本会暂停吗?谁投了反对票:看看这个行为所指出的@user2310967的答案。任何关于Chrome行为的解释都是不完整的,没有注意到类似这样的东西,这种行为是一个bug,不应该像现在这样表现出来。即使没有firebug,我也可以在ff中调试js。不相关,因为控制台代码在调试器语句的当前范围内运行。没有理由不能为局部范围变量a指定新值。如果将调试器语句等价地替换为a=9,那么代码将按预期输出9。OP询问它为什么这样做,这是否是错误。这是否是一个bug取决于谷歌打算做什么。此外,它还解释说,在这里,他们可以通过使用变量作为引用而不是值来纠正它。对谁投了反对票:看看@user2310967的答案,正如这个行为所指出的。任何关于Chrome行为的解释都没有注意到类似这样的东西
havior是一个bug,不应该像当前那样表现出来,它是不完整的。我可以在ff中调试js,即使没有firebug。不相关,因为控制台代码在调试器语句的当前范围内运行。没有理由不能为局部范围变量a指定新值。如果将调试器语句等价地替换为a=9,那么代码将按预期输出9。OP询问它为什么这样做,这是否是错误。这是否是一个bug取决于谷歌打算做什么。此外,它还解释说,在这里,他们可以通过使用变量作为引用而不是值来更正它。