防止在Javascript中自动创建全局变量

时间:2009-09-21 17:25:57

标签: javascript scope

我只花了一些时间来调试一个问题,该问题归结为忘记在新变量标识符前面使用var关键字,因此Javascript在全局范围内自动创建该变量。有没有办法防止这种情况,或者更改默认行为,而不使用像JSLint这样的验证器?

在编写和执行Javascript代码之间运行验证器似乎是编译的一个不好的借口,这是我通常依赖的步骤来捕捉这类事情。

我猜测答案是“不”,所以我正在研究一个JSLint Eclipse插件,因为我发布了这个。

6 个答案:

答案 0 :(得分:5)

ES5 strict mode阻止自动创建全局变量,但是可能需要一年时间才能识别严格模式的任何运送浏览器,所以在此之前JSLint可能是你最好的选择: - /

答案 1 :(得分:3)

检查由this创建的Remy Sharp便捷书签,您可以使用它来检查是否有任何变量滑落到全局命名空间。

答案 2 :(得分:2)

不是我所知道的 - JS开发人员历来一直不喜欢在核心语言中添加“安全带”,所以他们已经在JSLint这样的外部工具中实现了。您可以考虑通过它的Rhino version将JSLint添加到构建/测试过程中,如果JSLint报告错误,则使测试套件失败。

答案 3 :(得分:1)

答案确实没有 - 但你可以像你说的那样使用Eclipse插件,据我所知,在保存等时可以运行,因此不需要额外的步骤。

IntelliJ IDEA还能够发现未声明的变量。 IntelliJ会在您键入时实时执行,也可以分析您的代码库jslint样式。也可能是其他一些替代品。

答案 4 :(得分:1)

前段时间我做了一个bookmarklet来检查和检测全局变量。

alt text http://yura.thinkweb2.com/detect_global.png

它还有一些其他功能(例如过滤掉Prototype.js或Google Analytics(分析)属性)。

答案 5 :(得分:0)

安装Firebug,并在您的网站上启用它。每次创建没有var的全局,以及您可能或可能不想捕获的其他一些情况时,它都会抱怨。

您也可以使用about:config选项javascript.options.strict执行此操作,但由于这是全局的,因此它也会影响您浏览的所有其他网站。