【问题标题】:UMD javascript module which also works in strict modeUMD javascript 模块,也可以在严格模式下工作
【发布时间】:2015-11-07 20:36:52
【问题描述】:

我无法将其重写为在“严格”模式下工作。由于未明确定义“this”,因此我在编译时遇到 jshint 错误。我在想我的大脑只是不够抽象地思考,无法找到创造性的解决方案。任何帮助,将不胜感激。代码改编自通用模块定义 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 {};
}));

【问题讨论】:

  • 嗯...this 指的是什么?这取决于环境吧?你可以根本不传递它,而是在 else 语句中引用 window
  • @KevinB 正确,this 指的是当前环境。因此,使用window 将允许在某些环境中使用正确的功能,但不允许环境之间的互操作性,这是我的目标。我已经用通用模块定义 Github 项目的链接更新了我的问题

标签: node.js requirejs umd


【解决方案1】:

查看您的代码,我发现root 仅在您在浏览器中的情况下实际使用,这简化了事情。

这意味着我们可以将this替换为以下表达式:

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

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

如果你在其他情况下也需要全局对象,你可以链接三元表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2015-09-14
    • 2021-03-28
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多