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

Object.keys(window);

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

因此,我正在寻找内存泄漏,忘记的var关键字等等。

#1楼 票数:2

要[仅]做您要问的事情,我想您正在寻找的是:

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

我没有删除该代码,这与我不同,但是您明白了。 首先尝试设置一些内容( var spam = "spam"; ),您会在控制台上看到它的报告,而不是您询问要避免的内容。

也就是说, JLRishe是正确的 JSLint可以在浏览器中执行JavaScript,而无需“打电话回家”,因此可以随时运行它。 还有许多用于JSLinting代码的脱机工具。 例如,我使用Sublime Text插件

如果您希望使用一些最简单的html / JavaScript代码来“包装” JSLint,那么这里有一个示例。 只需从Crockford的存储库中将最新的jslint.js文件下载到同一目录中,然后使用JSLint.js的本地副本即可。 编辑:此处的新答案中添加了代码。

尽管了解到您正在使用该包装器本地访问, 或者访问JSLint.com时 老实说,我可以说有信心,克罗克福德不愿意看到我们的代码。 ; ^)您可以从JSLint.com下载JSLint.js(实际上是webjslint ,是几个文件的缩编),但是可以在浏览器中执行。

(不可否认,您在技术上是正确的-您永远都不知道该网站何时会受到威胁,并且要完全正常运行,每次获取新副本时都要sh / c / oul vet jslint.js。这是在本地运行更安全,但在撰写本文时,使用JSLint.com似乎很安全。在运行一些测试,非专有代码时,只需盯着您喜欢的浏览器的“网络”选项卡,看看是否有任何通话发生即可,或者拔出包装盒的网络电缆!)

里克的回答使用"use strict"; 是另一个很棒的建议。

#2楼 票数:0

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

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

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

#3楼 票数:0 已采纳

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

这是文档

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

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

  ask by user3719454 translate from so

未解决问题?本站智能推荐:

4回复

避免javascript中的隐含全局变量(JSlint)

在编写像这样的代码时,jsLint会抱怨隐含的全局变量: (具体来说,'隐含的全球:警报4') 什么被认为是避免这种情况的正确方法? 我的本能反应就是这样,但我不相信它是'正确的': 编辑:共识似乎是问题不是我访问全局的事实,更多的是我没有告诉jslint全局变量是什么。
3回复

使用JavaScript自定义规则进行静态分析?

JSLint,JSHint或其他一些开源静态代码分析工具是否支持添加自定义规则以实现代码合规性,或者我可以使用一些ECMAScript兼容解析器来使结果尽可能接近下面的代码片段中所示的结果。 ? 例如,如果它调用一个库(或智能手机为HTML5小部件提供的API)来注册该API命名空间下的所
5回复

JSLint将'window'作为全局变量的问题

所以我正在使用JSLint来尝试检测错误。 我关闭了一些我不喜欢的选项,但我没有看到任何方法能够使用window全局变量。 好吧,有Yahoo Widget选项,但这太过分了。 使用'window'有什么用处,为什么JSLint会说这会导致错误?
1回复

jslint应该只监视全局变量

我正在尝试使用http://www.jslint.com/上的在线棉绒。 我也尝试过使用webstorm。 我只想获取全局变量。 但是,我的代码很长(大约30000行),并且只扫描其中的1%。 有没有办法使用lint或其他工具仅查找全局变量(其余对我而言并不重要)。 我的目标是将所有全
10回复

检查全局变量是否存在的正确方法是什么?

JSLint 没有将此作为有效代码传递: 什么是正确的方法?
3回复

为什么JSLint会抱怨未定义/隐含的全局变量?

我试图理解为什么JSLint在以下示例中抱怨隐含的全局变量: 通过JSLint运行它会给出错误: 第5行第12个问题:未定义“add_one”。 除了说: 隐含的全局:add_one 5 如果在add_one()函数之前移动get_count()函数,
1回复

如何传递jslint并将全局变量传递给我的IIFE?

jslint不喜欢this 。 但是这是我将全局变量传递给同时在客户端和服务器上运行的IIFE的方式。 我该如何更改? 我想通过没有设置任何选项的jslint。
3回复

如何告诉JSLint / JSHint已定义了哪些全局变量

在我的项目中,我们有一些全局变量作为容器: 那么我在整个网站上使用该脚本,JSLint / JSHint抱怨: “MyProject”未定义 我知道我可以访问每个JavaScript文件并在其上添加注释/*global MyProject*/ 。 但我正在寻找一种方法