[英]Change of input type by javascript don't work with Chrome but with IE, why?
[英]Why Chrome don't allow change variables in debug
我在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中不起作用(它甚至没有在调试器行中停止)
这只是行为上的错误 ,将在以后的版本中修复。
如果您想更深入地了解“ 为什么 ”,则需要了解许多有关Chrome的调试器和JavaScript实现的信息。 根据修复程序中一个文件的差异 ,调试器以前使用context_builder.native_context
但现在使用context_builder.evaluation_context
。 显然,由旧调试器代码创建的native_context
在解析(或不视为只读)本地作用域变量时遇到了问题。 如果您真的想要更多,可以联系修复的作者。
至于为什么调试器没有出现在Firefox中:如果您正在运行<script>
代码并打开开发工具,则会显示该调试器。 从控制台运行代码时,似乎必须专门打开调试器选项卡。 显然,如果打开控制台以键入代码,这是不可能的,但是可以将其包装在setTimeout
并快速切换到“调试器”选项卡:
setTimeout(function() { debugger; }, 5000)
这与如何使用变量有关。 对象通过引用使用。 因此,更改aa
将有效地更改适当存储器地址处的值。 虽然,改变a
因为在控制台评估的变量,创建一个新的内存地址,你的任何测试版本本身不会做任何事情。
为使FireFox不会在debugger
行中断,它会在此页面中声明( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger ):“如果没有可用的调试功能,则此声明无效。”。 因此,您必须确保我认为已安装了FireBug。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.