我刚刚花了一些时间调试一个问题,因为忘记在新变量标识符前面使用关键字var
,所以Javascript在全局范围内自动创建该变量。有没有什么办法来防止这种情况发生,或者改变默认行为,而不使用像JSLint这样的验证器?防止在Javascript中自动创建全局变量
在编写和执行Javascript代码之间运行验证程序似乎是一个糟糕的编译借口,这是我通常会依赖的步骤来捕获这类事情。
我猜测答案是“不”,所以我正在研究JSLint Eclipse插件,因为我发布了这个。
我刚刚花了一些时间调试一个问题,因为忘记在新变量标识符前面使用关键字var
,所以Javascript在全局范围内自动创建该变量。有没有什么办法来防止这种情况发生,或者改变默认行为,而不使用像JSLint这样的验证器?防止在Javascript中自动创建全局变量
在编写和执行Javascript代码之间运行验证程序似乎是一个糟糕的编译借口,这是我通常会依赖的步骤来捕获这类事情。
我猜测答案是“不”,所以我正在研究JSLint Eclipse插件,因为我发布了这个。
ES5 strict mode防止自动创建全局变量,但它可能会在一年之前,有一些认识严格模式的任何运输的浏览器,所以JSLint的可能是你最好的赌注在那之前: -/
不是我知道 - JS开发人员历来不愿意为核心语言添加“安全带”,所以他们已经用JSLint等外部工具来实现。您可以考虑通过Rhino version将JSLint添加到您的构建/测试过程中,并在JSLint报告错误时使测试套件失败。
答案确实不是 - 但你可以像你说的那样使用Eclipse插件,据我所知,在保存等时运行它,所以它不需要额外的步骤。
IntelliJ IDEA还能够发现未声明的变量。 IntelliJ可以在你键入的时候实时执行,还可以分析你的代码库jslint风格。可能也有其他一些替代方案。
检查this方便的小书签由Remy Sharp创建,您可以使用它来检查是否有任何变量滑出到全局名称空间。
安装Firebug,并在您的网站上启用它。它会在你每次创建一个没有var
的环球时发出抱怨,以及其他一些你可能会或可能不想要的情况。
您也可以使用about:config
选项javascript.options.strict
来做到这一点,但由于这是全球性的,它也会影响您浏览的所有其他网站。
前段时间我做了一个bookmarklet来检查和检测全局变量。
alt text http://yura.thinkweb2.com/detect_global.png
它有一些额外的功能(比如过滤掉的Prototype.js或谷歌Analytics(分析)属性)了。
我已经有Firebug,它没有抱怨。 – 2009-09-21 20:53:32
您必须确保启用它,包括“脚本”选项卡,就像执行脚本调试时一样;它不会自行干预。 – bobince 2009-09-21 23:42:01