为什么会有一个' amd'属于'定义'功能?

时间:2014-04-23 14:43:30

标签: javascript jquery backbone.js requirejs amd

我正在学习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中的amd函数中始终有define个属性?

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

1 个答案:

答案 0 :(得分:2)

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

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

如果某个随机第三方库决定也导出其自己的define函数(与定义AMD模块无关),那么事情仍然存在风险,决定为它添加一个amd属性,但风险远远低于我上面解释的方案没有使用。

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

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