Javascript 为什么会有';amd&x27;位于';定义';功能?
我正在学习jQuery和主干源代码,并注意到它们检查是否有requirejs: 为什么在requirejs中的Javascript 为什么会有';amd&x27;位于';定义';功能?,javascript,jquery,backbone.js,requirejs,amd,Javascript,Jquery,Backbone.js,Requirejs,Amd,我正在学习jQuery和主干源代码,并注意到它们检查是否有requirejs: 为什么在requirejs中的define函数中总是有amd属性 而且define.amd始终是一个对象,其键jQuery为true?即使我还没有导入jQuery模块?这是AMD加载程序应该使用的一种约定,用于指示导出到全局空间的define是AMD模块用来定义自身的define 如果AMD加载程序不使用此约定,那么如果某个随机JavaScript库决定将define函数导出到与AMD无关的全局空间,然后,设计用
define
函数中总是有amd
属性
而且
define.amd
始终是一个对象,其键jQuery
为true
?即使我还没有导入jQuery模块?这是AMD加载程序应该使用的一种约定,用于指示导出到全局空间的define
是AMD模块用来定义自身的define
如果AMD加载程序不使用此约定,那么如果某个随机JavaScript库决定将define
函数导出到与AMD无关的全局空间,然后,设计用于使用或不使用AMD加载器的代码会错误地认为它们是在存在AMD加载器的环境中使用的
如果某个随机的第三方库决定也导出其自己的define
函数(与定义AMD模块无关),并决定向其添加AMD
属性,则仍然存在出现问题的风险,但风险比我上面解释的方案没有使用时要低得多
因此,您所展示的代码中的jQuery和主干测试它是否在存在AMD加载程序的AMD环境中使用,如果是,则将自身定义为AMD模块
define.amd.jQuery
特定于jQuery,并指示加载程序能够同时加载多个版本的jQuery
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}
if (typeof define === 'function' && define.amd) {
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {