Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么会有';amd&x27;位于';定义';功能?_Javascript_Jquery_Backbone.js_Requirejs_Amd - Fatal编程技术网

Javascript 为什么会有';amd&x27;位于';定义';功能?

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无关的全局空间,然后,设计用

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

为什么在requirejs中的
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) {