避免javascript中的隐含全局变量(JSlint)

时间:2011-01-31 23:07:21

标签: javascript jslint

当编写这样的代码时,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全局变量是什么。我会把这个打开一段时间以确定是否有其他人有输入,然后我会选择一个答案。

4 个答案:

答案 0 :(得分:8)

您可以在文件前添加评论

/*global alert $ document window*/

这通常是我告诉JSLint它不是暗示但是外部的。

这既不引人注目又告诉你的程序员,你将这些变量声明为外部变量对于更大的多文件程序是有用的。

答案 1 :(得分:4)

使用jsLint的“假设浏览器”和“假设控制台,警报......”选项来使jsLint知道这些函数。 有关所有可用选项的列表,请参阅http://www.jslint.com/lint.html#options

答案 2 :(得分:1)

对于那些搜索JSHint的人来说,有一个选项"浏览器"可以设置为" true"并处理所有常见的全局变量。同样适用于" jquery"。我是从gradle-js-plugin source code了解到的。

答案 3 :(得分:0)

我认为你的方式是正确的(也是好的),但没有必要声明global.alert,只需使用global.alert("pew: "+x);