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