【问题标题】:How to display all JavaScript global variables with static code analysis?如何通过静态代码分析显示所有 JavaScript 全局变量?
【发布时间】:2023-04-07 22:50:01
【问题描述】:

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

Object.keys(window);

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

所以我在寻找内存泄漏、忘记var关键字等等...

【问题讨论】:

  • 你试过JSLint吗?它可以检测未声明的全局变量和许多其他内容。
  • 是的,但我不想把我们的代码库放到互联网上......
  • JSLint 完全在浏览器中执行。你不会“把你的代码库放到互联网上”。
  • JSLint 的命令行适配适用于许多运行时。基本 API 是一个函数调用,因此如果您觉得有必要,您甚至可以编写自己的 API:它可以在 Node、Rhino 或其他任何东西中工作。

标签: javascript jslint


【解决方案1】:

要[仅]执行您的要求,我认为您正在寻找这个:

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

我没有对代码进行 linted,这与我不同,但你明白了。尝试先设置一些东西 (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 下载到同一目录中,然后噗,您正在使用 JSLint.js 的本地副本进行 linting。 编辑:在新答案here 中添加了代码。

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

(诚然,您在技术上是正确的——您永远不知道该站点何时会受到威胁,并且要完全恢复正常,您每次抓取时都应该审查 jslint.js一个新的副本。在本地运行更安全,但在撰写本文时,您似乎可以安全地使用 JSLint.com。只需在运行一些测试、非专有代码时盯着您最喜欢的浏览器的 Net 选项卡,看看是否有任何电话发生。或者拔掉你盒子的网线!)

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      Here is the documentation

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

      也可以使用包含一些有意的全局变量/*jsl:import <referenceFile>*/referenceFile,这样这些变量就不会被列出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多