JSLint超出范围

时间:2014-02-02 06:59:19

标签: javascript jslint

我有以下代码,并且'myGlobal'超出了范围。我必须返回myGlobal或新对象,因为该对象被添加到其他文件中。

var myGlobal= (function (my) {
    'use strict';

    return my;
}(myGlobal|| {}));

在这种情况下有没有办法满足jsLint?

2 个答案:

答案 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);

<强>参考