gpt4 book ai didi

javascript - 在 require.js 中定义全新模块时使用导出是否合适?

转载 作者:行者123 更新时间:2023-12-02 18:49:38 26 4
gpt4 key购买 nike

由于 require.js 是 AMD 模块加载器,因此定义一个新模块,例如:

define(["jquery"],function($){   var _private;   var obj = {       pubFunc:...   }   return obj;});

define(["jquery","exports"],function($,exports){ var pubFunc; exports.pubFunc = pubFunc;});

难道Require.js定义新模块的第二个不合适吗?

最佳答案

TL;DR:第一个是 RequireJS 的设计方式(使用那个);第二个不是。

更多信息:

看来您将 RequireJS 与 Node 的 require 混淆了。

在第二个中,您几乎通过向后导出(导出到应该是依赖项的位置)来反转依赖项链的方向。

这实际上在大多数情况下都有效:

exports.pubFunc = pubFunc;

只要:

  • JavaScript 对象是通过引用传递的,因此该属性将被添加到 RequireJS 持有的 exports 对象中;和
  • 每当需要 exports 时,RequireJS 将继续分发修改后的 exports 对象。

但是,这完全依赖于 RequireJS 的缓存。作为一种优化,RequireJS 存储模块的导出,而不是每次都加载文件;因此,exports 的缓存版本被重新分发(包含您添加的属性)。

因此,当缓存的对象没有被传递时,这会中断,例如在不同的 RequireJS contexts 中。 .

您应该将导入视为不可变,即使您可以修改它们。

关于javascript - 在 require.js 中定义全新模块时使用导出是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com