避免javascript中的隐含全局变量(JSlint)
在编写这样的代码时,jsLint会抱怨隐含的全局变量:避免javascript中的隐含全局变量(JSlint),javascript,jslint,Javascript,Jslint,在编写这样的代码时,jsLint会抱怨隐含的全局变量: var Test = (function(){ var fnc = function(x){ alert("pew: "+x); }; return { fnc: fnc }; }()); Test.fnc("hat"); (特别是“隐含全局:警报4”) 避免这种情况的正确方法是什么?我的本能反应是这样的,但我不相信这是“正确的”: var Test2 = (functi
var Test = (function(){
var fnc = function(x){
alert("pew: "+x);
};
return {
fnc: fnc
};
}());
Test.fnc("hat");
(特别是“隐含全局:警报4”)
避免这种情况的正确方法是什么?我的本能反应是这样的,但我不相信这是“正确的”:
var Test2 = (function(global){
var alert = global.alert;
var fnc = function(x){
alert("pew: "+x);
};
return {
fnc: fnc
};
}(this));
Test2.fnc("hat");
编辑:
大家的共识似乎是,问题不在于我正在访问一个全局文件,而在于我没有告诉jslint全局文件是什么。我会让它再打开一点,看看是否有其他人有输入,然后我会选择一个答案。使用jsLint的“假设浏览器”和“假设控制台,警报,…”选项让jsLint知道这些函数。
有关所有可用选项的列表,请参阅。您可以在文件前添加注释
/*全局警报$document窗口*/
我通常是这样告诉JSLint它不是隐含的,而是外部的
这既不引人注目,又告诉您的程序员同事,您将这些变量声明为外部变量对更大的多文件程序很有用。我认为您的方法是正确的(也很好),但无需声明
global.alert
,只需使用global.alert(“pew:+x”)代码>对于那些搜索JSHint的人,有一个选项“browser”,它可以设置为“true”,并处理所有常见的全局变量。与“jquery”相同。我从.中了解到,var-alert=global.alert
实际上只是为了方便起见,因此它的行为与我将错误保留在中时的行为相同。我看不到使用它有任何方便。但不管这一部分,我认为你的解决方案不仅正确,而且很好。IIRC变量名声明不需要逗号分隔吗?@ZackTheHuman there space separated。原来JSLint说逗号是分开的。我总是使用空格分隔的列表,没有错误。它可能同时处理注释的开头和global
之间不应该有空格的问题,否则jslint不会处理它。