JavaScript中的“定义”用于什么(除了显而易见的)?

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

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

他们的侧边栏.js以此开头,但我一生都找不到任何解释其含义的文档。

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

然后,它继续在这个包装器中定义一堆函数,所以和一些 - 我可以稍微弄清楚......varsproptotypes

这句话是什么意思,或者我在哪里可以找到解释?


答案 1

我不能肯定地说没有看到整个脚本,但它很可能是来自 RequireJS 的定义函数,特别是该函数的“使用依赖关系定义”形式。它用于定义“模块”:

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

“使用依赖关系定义”形式描述如下:define

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


答案 2

这是用于编写模块的AMD模式,AMD代表异步模块定义,当您需要导入模块异步而不是像commonJS一样。

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Define采用一个依赖关系数组,一旦所有这些依赖关系以非阻塞方式在后台(异步)加载,define调用回调,回调反过来接受参数(在本例中为依赖关系)。

需要注意的另一件事是,这些模块中的每一个也需要使用“define”关键字进行定义。因此,例如模块1将定义如下:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

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

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