如何使用静态代码分析显示所有JavaScript全局变量?

时间:2015-03-31 11:52:23

标签: javascript jslint

我知道我可以在Chrome或FF中键入以下命令:

Object.keys(window);

但这显示了DHTMLX的内容以及我不感兴趣的函数名称。它并没有在尚未执行的函数中显示变量。我们有超过20,000行的JavaScript代码库,所以我更喜欢静态代码分析。我找到了JavsScript Lint。这是一个很棒的工具,但我不知道如何使用它来显示全局变量。

所以我正在搜索内存泄漏,忘记var个关键字等等...

3 个答案:

答案 0 :(得分:2)

要做[仅]你所要求的,我认为你正在寻找这个:

for each (obj in window) {
    if (window.hasOwnProperty(obj)) { 
        console.log(obj);
    }
}

我还没有找到与我不同的代码,但是你明白了。首先尝试设置一些内容(var spam = "spam";),然后在控制台上看到它已报告,您要求避免的内容。

那就是JLRishe is right; JSLint在您的浏览器中执行JavaScript而无需打电话给家庭",所以随意运行它。 JSLinting您的代码还有许多离线工具。例如,我使用plugin for Sublime Text

如果你想要一些最简单的html / JavaScript代码来"包装" JSLint,我有一个例子here。只需将the latest jslint.js file from Crockford's repository下载到同一目录中,然后poof,即可使用JSLint.js的本地副本进行linting。 修改:在新回答here中添加了代码。

在您访问JSLint.com 时,了解您在本地使用该包装进行了本地处理。老实说,我可以有信心地说,Crockford宁愿看到我们的代码。 ; ^)您可以从JSLint.com下载JSLint.js(实际上是webjslint,一个缩小的文件汇编),但是您可以在浏览器中执行。

(不可否认,你在技术上是正确的 - 你永远不知道该网站什么时候可以被攻陷,并且完全上升,你每次都应该审查jslint.js你可以获得一份新的副本。在本地运行更安全,但在撰写本文时,你似乎可以安全地使用JSLint.com。在运行一些测试,非专有代码时,只需看看你最喜欢的浏览器的Net选项卡,看看是否发生任何打电话。或者拔掉你的盒子网线!)

Rick's answeruse "use strict";是另一个很好的建议。

答案 1 :(得分:0)

捕获未声明变量的好方法是在代码中添加'use strict'

错误将显示在控制台中,或者您可以在try ... catch块中显示错误:

'use strict';
try {
  var i= 15;
  u= 25;
} catch(ee) {
  alert(ee.message);
}

答案 2 :(得分:0)

我找到了一个非常好的解决方案,可以使用jsl命令行工具列出所有全局变量:

Here is the documentation

我只需要将/*jsl:option explicit*/放入我要检查的每个文件中。然后运行./jsl -process <someFile> | grep 'undeclared identifier'

就足够了

也可以使用包含一些有意的全局变量referenceFile的{​​{1}},这样就不会列出这些变量。