为什么Chrome DevTools中不存在对象?

sha*_*hal 1 javascript google-chrome

当我加载页面时,我有一行: <script>HUD = "hello";</script>,然后我打开页面,打开DevTools,转到控制台"并输入HUD- 我看到

VM331:1 Uncaught ReferenceError: HUD is not defined(…)

然后我重新加载页面,保持DevTools打开,然后再次进入HUD - 现在它存在并打印"你好"

<!DOCTYPE html>
<html>
<head lang="en">

    <script> 
        var HUD = "hello";
        console.log(HUD);
    </script>
</head>
<body>
	Open console and enter HUD - is it there?
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

运行代码段并以这种方式检查 - 有时HUD存在,有时则不存在.我想知道为什么...

看到j​​s小提琴的截图,证明了这一点: 您可以使用HUD,但DevTools仍然不存在

Den*_*ret 5

这里的问题是这个无用的变量可能会被JavaScript引擎优化掉(控制台文档中提到了这种行为).

一些解决方案来修复它并防止其被删除:

  • 将其明确设置为window属性:window.HUD = "hello";
  • 将它包含在无操作操作中:( (function(v){ if (!v) die(); })(HUD);这个更危险,因为更智能的引擎可以检测到它仍未真正使用)

请注意,这可能不是一个真正的问题:一旦此变量开始有用(即它可能在代码中的某处使用),引擎将不再删除它,您将能够在控制台中看到它特技.