我刚刚了解到,在DevTools控制台中调用keys(window)
(或Object.keys(window)
)会显示全局范围(source)中的变量。我在StackOverflow页面上调用了该代码,并得到以下结果:
变量i
似乎引起了我的注意,因为它似乎在全球范围内是一个错误。我试图找到负责声明的代码i
,但是结果很麻烦(有很多代码和很多i
s)。
获取表示以下内容的控制台警告
创建全局变量“ i”(main.js:342)
可能会有用。如何实现该功能?
我发现无论何时创建新变量,我都需要某种事件。
__noSuchMethod__
(MDN)会很完美,但它仅涵盖方法(没有__noSuchProperty__
方法)。Object.observe
(HTML5 Rocks)没有透露有关创建该属性的代码的任何信息(console.trace()
仅给我提供了观察函数的名称)。Object.prototype.watch
(MDN)-与设置器相同,您必须指定属性名称。Object.preventExtensions(window)
(MDN)都会导致错误,并带有良好的堆栈跟踪。该解决方案的问题在于,它会干扰脚本执行并可能更改其行为。它还不允许我捕获错误并正确格式化。i
SO页面上的变量,您可能可以使用setter查找声明。我的问题涉及此问题的一般解决方案。IMO,您有两个不错的选择:
当您泄漏全局变量时,两者都会对您大喊大叫。对于您的用例,严格模式可能会更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句