避免javascript中的隐含全局变量(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

在编写这样的代码时,jsLint会抱怨隐含的全局变量:

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不会处理它。