作为现代浏览器代码优化的副产品,在调试时,您无法“看到”“实际上”在范围内的所有变量。这是众所周知的,并已在 previous question here on SO 中得到解决。 。这个功能虽然在生产中肯定很有用,但在开发过程中却让我很烦恼,它减慢了我的速度(这应该是显而易见的。)
现在我的问题是,有什么办法可以关闭这种行为吗?我可以编辑一些配置文件,或者是否有浏览器插件,或者可能有浏览器可执行文件的“面向开发人员的特殊构建版本”?我喜欢在编写新代码时立即在控制台中输入代码,所以这真的很困扰我。
更新/编辑
这是部分解决方案,归功于 Paul1365972。
您必须从命令行启动 Chrome 浏览器,并使用特殊选项,如下所示:
- 完全关闭 Chrome
- 使用
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"--js-flags="--allow-natives-syntax"从控制台运行 Chrome
这适用于 Windows 其他操作系统,类似。 - 打开开发者控制台并执行
“%GetHeapUsage()”
。如果您使用该选项正确启动了 Chrome,则会在控制台中记录一个数字,否则您会收到语法错误。
使用此命令行标志,您可以使用以 %
开头的命令“与 V8”引擎对话,这些命令是纯 JavaScript 中的语法错误。此类可用 V8 命令的列表为 given in Paul's answer .
该列表中有 %NeverOptimizeFunction()
,这看起来像是我只需调用并完成它即可。不幸的是,该函数没有达到我所希望的效果,如下一个屏幕截图所示。
(((other link from Paul's answer (v8-natives 节点模块) 在这种情况下对我们来说并不重要。它所做的只是将单行代码包裹在“%”函数调用周围,因此代码不会使非 v8 的浏览器崩溃。)))
(((我记得这个方法曾经有效过(当时这个优化还没有发明/实现)。我不知道多久以前。十年?15年?类似的事情。最后一个 Chrome 是什么版本(如果有)以及您可以做什么的最后一个 Firefox 版本(更确定它存在)是什么?它不会为您带来赏金,但如果您碰巧知道并发布它,它会给您一个赞成票作为答案。)))
解决方案
谢谢彼得·斯尼切克
新问题
虽然 Petr 的解决方案很有帮助,但它并不完美。这个问题太长了,所以我发了一个new question关于如何改进 Petr 的解决方案。 (我当然可以在这里编辑这个问题,但如果你明白我的意思,那会感觉“不符合历史”。)
最佳答案
您可以通过将调试器语句包装在 eval 中来访问所有变量,如下所示:eval("debugger;");
。这个 hacky 解决方案向调用堆栈添加了另一个匿名函数,但它显然对于在 DevTools 中手动设置的断点没有用处。
这似乎不是一个很好的解决方案,但由于它是迄今为止唯一实现预期行为的解决方案,因此我将其作为答案发布。
关于javascript - 我可以关闭优化吗,这样闭包中的范围内变量就不是 "optimized out",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861823/