UMD的JavaScript模块,也在严格的模式下工作

我很难重写这个工作在“严格”模式。 由于“这个”没有明确定义,所以我在编译时遇到了jshint错误。 我在想,我的大脑只是不够抽象地想出一个创造性的解决scheme。 任何帮助,将不胜感激。 代码改编自通用模块定义Github回购: https : //github.com/umdjs/umd/blob/master/returnExports.js

(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD Module define([], factory); } else if (typeof module === 'object' && module.exports) { // Node Module module.exports = factory(); } else { // Browser Global root.returnExports = factory(); } }(this, function () { return {}; })); 

看看你的代码,我发现只有在浏览器中才使用root ,这就简化了一些事情。

这意味着我们可以用下面的expression来代替this

 typeof window !== "undefined" ? window : undefined 

这在严格模式下是有效的(我在Node中试过,它返回undefined ,没有错误),JSHint.com也允许它。

如果在其他情况下还需要全局对象,则可以链接三元expression式。