在javascript中拦截全局变量定义

时间:2011-08-08 16:25:30

标签: javascript variables global

我正在尝试整理一些javascript代码,其中一个步骤是删除所有无用的(或错误的)全局变量,这些变量已经从错误中滑落:

for (prop in obj) { ...

而不是

for (var prop in obj) { ...

JSLint有助于找到这种肮脏,但是当运行时发生肮脏时,它并非100%万无一失。 我已经尝试添加一些监控代码,如果检测到一些新变量,它会定期检查记录到控制台的全局范围,这有助于更多,但是当它告诉我一个新的全局变量名为“我已经被发现......好吧,找到数千行代码中发生的事情真是一团糟。

所以我们来了:有没有更好的方法/工具/脚本/无论如何找到小害虫? 我的梦想就像一个Firebug插件,只要创建一个新的全局变量就会停止执行...

谢谢!

5 个答案:

答案 0 :(得分:3)

您可能会发现此bookmarklet有用。

另外,请查看此答案:How to detect creation of new global variables?

答案 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)

好吧,我很久以前写过这篇文章,所以代码很糟糕,但它完成了这项工作:https://gist.github.com/1132193 粘贴在firebug控制台中或包含在脚本中。

答案 3 :(得分:0)

你说,你正试图整理一些代码。 在这种情况下 - 使用IDE,如NetBeans PHP(免费)或JetBrains WebStorm(30 $)。它们都为全局变量着色,并做了许多其他有用的东西;) 如果您的轮询脚本仍然会检测到全局变量的创建 - 追踪违规函数,并使它们受损;)最后,代码将变得干净。

答案 4 :(得分:0)

您现在可以按照 this similar question

中的说明拦截变量定义
window.__defineSetter__('sneakyVariable', function() {
    debugger
})

并且您将能够找到它的定义位置