gpt4 book ai didi

javascript - 为什么 'amd'函数中有一个 'define'属性?

转载 作者:行者123 更新时间:2023-11-29 22:02:01 24 4
gpt4 key购买 nike

我正在学习 jQuery 和 Backbone 源代码,并注意到他们检查是否有 requirejs:

jQuery 1.9.1

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}

Backbone

if (typeof define === 'function' && define.amd) {
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {

为什么在requirejs的define函数中总是有一个amd属性?

define.amd 始终是一个对象,其键 jQuerytrue?即使我没有导入 jQuery 模块?

最佳答案

AMD 加载程序应该使用一个约定来指示它们导出到全局空间的 define 是 AMD 模块使用的 define定义自己。

如果 AMD 加载程序不使用此约定,那么如果某个随机 JavaScript 库决定将 define 函数导出到与 AMD 无关的全局空间,则设计用于与或没有 AMD 加载程序会错误地认为它们是在存在 AMD 加载程序的环境中使用的。

如果一些随机的第三方库决定也导出它自己的 define 函数(这与定义 AMD 模块无关),事情仍然存在歪斜的风险 决定向其添加一个 amd 属性,但与未使用我上面解释的方案相比,风险要低得多。

因此,您展示的代码中的 jQuery 和 Backbone 测试它是否在存在 AMD 加载程序的 AMD 环境中使用,如果是,则将其自身定义为 AMD 模块。

define.amd.jQuery 是特定于 jQuery 的,表示加载器能够同时加载多个版本的 jQuery。

关于javascript - 为什么 'amd'函数中有一个 'define'属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23247750/

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