我只花了一些时间来调试一个问题,该问题归结为忘记在新变量标识符前面使用var
关键字,因此Javascript在全局范围内自动创建该变量。有没有办法防止这种情况,或者更改默认行为,而不使用像JSLint这样的验证器?
在编写和执行Javascript代码之间运行验证器似乎是编译的一个不好的借口,这是我通常依赖的步骤来捕捉这类事情。
我猜测答案是“不”,所以我正在研究一个JSLint Eclipse插件,因为我发布了这个。
答案 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
执行此操作,但由于这是全局的,因此它也会影响您浏览的所有其他网站。