在JavaScript中使用的'define'是什么(除了显而易见的)?

Dav*_*van 159 javascript requirejs requirejs-define

我已经搜索了关于此的文档的高低,但我在任何地方都找不到任何东西.

我正在使用Aloha并希望使用他们的侧边栏原型来创建我自己的新侧边栏,附加到其他插件功能.

他们的sidebar.js从这开始,但我不能为我的生活找到任何解释它意味着什么的文档.

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {
Run Code Online (Sandbox Code Playgroud)

然后它继续在那个包装器中定义一堆函数,所以vars还有一些proptotypes- 我可以解决这个问题......

那是什么说法或在哪里可以找到解释?

Jam*_*ice 171

我不能在没有看到整个脚本的情况下肯定地说,但它可能是defineRequireJS函数,特别是该函数的" define with dependencies "形式.它用于定义"模块":

模块与传统脚本文件的不同之处在于它定义了一个良好范围的对象,可以避免污染全局命名空间.它可以显式列出其依赖项并获取这些依赖项的句柄,而无需引用全局对象,而是将依赖项作为参数接收到定义模块的函数.

"依赖于定义"的形式define描述如下:

如果模块具有依赖关系,则第一个参数应该是依赖项名称数组,第二个参数应该是定义函数.所有依赖项加载后,将调用该函数来定义模块.该函数应返回定义模块的对象.

  • 哪个版本的IE不支持这个... ;-) (4认同)

The*_*Ben 8

这是用于编写模块的 AMD 模式,AMD 代表异步模块定义,用于基本上异步导入模块而不是像 commonJS 这样的模块。

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});
Run Code Online (Sandbox Code Playgroud)

定义需要一个依赖项数组,一旦所有这些都以非阻塞方式在后台(异步)加载,定义调用回调,回调又接受参数(在这种情况下是依赖项)。

另一件需要注意的是,这些模块中的每一个都需要使用“define”关键字来定义。因此,例如 module1 将被定义如下:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});
Run Code Online (Sandbox Code Playgroud)

这种编写模块的方式 (AMD) 允许您在编写时考虑浏览器兼容性(不像 nodeJS 中的 require() ),并且您还可以定义多种格式,包括对象、JSON 等,而例如 commonJS 需要模块是对象。

请记住,AMD 有自己的缺点。希望这可以帮助某人。