为什么会有一个'amd'属性在'define'作用
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
总是一个对象,哪个密钥jQuery
是true
?连我都没有导入jQuery模块?
AMD加载程序应该使用这一约定来指示它们导出到全局空间的define
是AMD模块用来定义自己的define
。
如果AMD加载程序不使用此约定,那么如果某个随机JavaScript库决定将define
函数导出到与AMD无关的全局空间中,那么设计为使用或不使用AMD加载程序的代码将错误地认为它们是在存在AMD加载程序时使用的。
如果某个随机的第三方库决定也导出自己的define
函数(与定义AMD模块无关),并且决定向其添加amd
属性,那么事情仍然有出错的风险,但风险远低于我上面解释的方案。
因此,您所展示的代码中的jQuery和Backbone测试它是否在存在AMD加载程序的AMD环境中使用,如果是,则将其定义为AMD模块。
define.amd.jQuery
是jQuery特有的,表示加载器能够同时加载多个版本的jQuery。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 将作用域存储在JSON中
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- 需要define()中具有Backbone.js作用域的.js
- 为什么会有一个'amd'属性在'define'作用