为什么Chrome不'不允许在调试中更改变量
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中不起作用(它甚至没有在调试器行中停止)
这只是一个bug,将在即将发布的版本中修复。
如果你想要一个比这更深入的"为什么",你需要了解Chrome的调试器和JavaScript实现。根据修复中一个文件的差异,调试器以前使用context_builder.native_context
,但现在使用context_builder.evaluation_context
。显然,由旧调试器代码创建的native_context
在解决(或不将其视为只读)本地作用域变量时遇到了问题。如果您真的想要更多,您可以联系修复程序的作者。
至于为什么调试器没有出现在Firefox中:如果您正在从<script>
运行代码并打开开发工具,它就会出现。从控制台运行代码时,似乎必须专门打开调试器选项卡。显然,如果您打开控制台输入代码,这是不可能的,但您可以将其封装在setTimeout
中,并快速切换到Debugger选项卡:
setTimeout(function() { debugger; }, 5000)
这是如何使用变量的问题。对象是通过引用使用的。因此,改变a.a
将有效地改变适当存储器地址处的值。不过,在任何测试版本中更改a
本身都不会有任何作用,因为会为控制台中计算的变量创建一个新的内存地址。
对于FireFox没有在debugger
行中断,它在本页中声明(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger):"如果没有调试功能,这句话就没有效果。"。所以,我想你必须确保安装了FireBug。
- 如何在vs2002中调试html页面
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- 如何在visualstudio中调试web api时编辑javascript文件
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- 如何调试Javascript代码或函数
- 为什么使用immutableJS我的状态没有改变
- 基于Web的JS调试库
- JavaScript改变了双方的显示风格
- 调试此代码?警报不起作用
- 改变所有<td>为特定的桌子点击颜色
- 变量dos'即使我可以返回更新后的值,也不会改变
- jQuery更改变量值
- 爆米花改变来源
- innerHTML赢得't改变元素
- Javascript onclick更改变量值
- 如何在 JavaScript 代码中调试点击事件处理
- 如何改变Box2D.js调试图可视化的位置