使用$
in变量没有错。我不会对每个变量故意这样做,但这仍然是有效的语法。jQuery是$
用作变量名的示例之一。这就是为什么“ Chrome开发人员工具并不总是看到这是Javascript错误”的原因,因为首先没有错误。
如果您害怕编写如下代码:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
那么您必须使用样式检查器,例如jsLint,jsHint或Google Closure Linter。其中哪一个?由您决定。为了帮助您,请注意以下几点:
样式
Google Closure Linter遵循Google JavaScript样式指南(众所周知)。对JavaScript或其他六种语言使用众所周知的样式是个好主意:当您共享代码或雇用新的开发人员时,他们很可能已经熟悉这种样式。
许多开发人员也对Douglas Crockford风格很熟悉。这种风格在JavaScript:The Good Parts中有详细解释,这本值得任何使用JavaScript的人都可以购买的书。
至于jsHint,我真的找不到使用的约定,并且网站本身似乎避免谈论该主题。也许我错过了一些东西。
IDE支持
PhpStorm 支持 jsLint和jsHint 。这也是这种情况谷歌关闭短绒的。
环境
Google Closure Linter是一系列工具之一。如果您已经在使用Google Closure编译器或Google Closure库,则最好在其他工具之上选择Closure Linter。
严格
众所周知jsLint是严格的。jsHint更为宽松,这并不总是一件好事。例如,在一篇文章中解释了将 jsLint替换为jsHint的原因之一,该文章显示了错误的代码,这会在jsLint中产生错误,但在jsHint中不会产生错误:
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
代码很糟糕,因为看起来JavaScript具有块作用域,而没有。请参见第49页的JavaScript:优质零件。102,附录A:糟糕的部分,范围。换句话说,在不了解语言的情况下查看代码,我们希望name
在循环外不可见,而仍将保持可见。
至于Google Closure Linter,我相信它位于jsLint和jsHint之间的中间位置,但是我没有足够的信息来支持它。
结论
我会避免使用jsHint:它太宽松了,这意味着它不会发现其他linters会检测到的潜在错误。很难找到所使用的样式指南。
在jsLint和Google Closure Linter中,选择并不明显。两者都是由专家编写的,都遵循严格的,精心描述的样式指南,成千上万的开发人员已经遵循。两者都使用一段时间,然后选择一个更适合您的方式。