我有以下代码,并且'myGlobal'超出了范围。我必须返回myGlobal或新对象,因为该对象被添加到其他文件中。
var myGlobal= (function (my) {
'use strict';
return my;
}(myGlobal|| {}));
在这种情况下有没有办法满足jsLint?
答案 0 :(得分:2)
当我碰到这个时,我想我经常作弊。例如,在浏览器上下文中,所有全局变量实际上都存在于window
对象上,因此您可以执行以下操作:
/*jslint sloppy:true, white:true, browser:true */
window.myGlobal = (function (my) {
'use strict';
return my;
}(window.myGlobal|| {}));
逻辑上减少了相同的东西,让JSLint感到高兴。
快速编辑:或者,尽管这基本上是相同的技巧(这听起来可能是你已经尝试使用myGlobal
设置的),考虑将你的全局变量分组到你的命名空间中定义为全局,像这样......
/*jslint sloppy:true, white:true, browser:true */
/*global MyNamespace */
MyNamespace.myGlobal = (function (my) {
'use strict';
return my;
}(MyNamespace.myGlobal|| {}));
虽然那是一种类似的情况。如果你不能完全确定你早先在某个地方定义了MyNamespace
,那么你现在正试图检查MyNamespace
是否存在。
因此,快速回答会缩小回到上面的window
技巧。
答案 1 :(得分:0)
使用this
作为全局范围的上下文:
var myGlobal= (function (my) {
'use strict';
return my;
}(this.myGlobal|| {}));
对于浏览器主机对象也可以这样做,例如document
:
var controller = {};
this.model = {"view": this.document || NaN, "viewmodel": controller.foo };
controller.foo = function myfoo(model) {
'use strict';
return model.document.title;
};
this.model.viewmodel(this.model);
<强>参考强>