繁体   English   中英

为什么“定义”函数中有一个“amd”属性?

[英]Why there is a 'amd' property in 'define' function?

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

jQuery 1.9.1

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) {

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

define.amd始终是一个对象,哪个关键jQuerytrue 甚至我还没有导入 jQuery 模块?

这是一个惯例,AMD装载机应使用,以表明define他们出口到全球空间的define是由由AMD模块使用来定义自己。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM