我正在尝试整理一些javascript代码,其中一个步骤是删除所有无用的(或错误的)全局变量,这些变量已经从错误中滑落:
for (prop in obj) { ...
而不是
for (var prop in obj) { ...
JSLint有助于找到这种肮脏,但是当运行时发生肮脏时,它并非100%万无一失。 我已经尝试添加一些监控代码,如果检测到一些新变量,它会定期检查记录到控制台的全局范围,这有助于更多,但是当它告诉我一个新的全局变量名为“我已经被发现......好吧,找到数千行代码中发生的事情真是一团糟。
所以我们来了:有没有更好的方法/工具/脚本/无论如何找到小害虫? 我的梦想就像一个Firebug插件,只要创建一个新的全局变量就会停止执行...
谢谢!
答案 0 :(得分:3)
您可能会发现此bookmarklet有用。
答案 1 :(得分:0)
我想知道你是否可以设置超时来创建所有全局变量的列表,然后将其与上次触发超时的时间进行比较。我在Stack Overflow上找到了这个,也许你可以将这个代码与setTimeout()一起使用来获得你想要的东西。
块引用 是的,不是。几乎在所有情况下都“不”。 “是的,”但是只有在有限的方式,如果你想检查全球范围。请看以下示例: var a = 1,b = 2,c = 3;
for ( var i in window ) {
console.log(i, typeof window[i], window[i]);
}
Stack Overflow链接:Getting All Variables In Scope
答案 2 :(得分:0)
答案 3 :(得分:0)
你说,你正试图整理一些代码。 在这种情况下 - 使用IDE,如NetBeans PHP(免费)或JetBrains WebStorm(30 $)。它们都为全局变量着色,并做了许多其他有用的东西;) 如果您的轮询脚本仍然会检测到全局变量的创建 - 追踪违规函数,并使它们受损;)最后,代码将变得干净。
答案 4 :(得分:0)
您现在可以按照 this similar question
中的说明拦截变量定义window.__defineSetter__('sneakyVariable', function() {
debugger
})
并且您将能够找到它的定义位置