Что мне дает протокол define (), описанный в спецификации CommonJS? - PullRequest
2 голосов
/ 19 мая 2011

Я понимаю, как такие вещи, как правильный интервал имен и шаблон модуля справочные проблемы, связанные с утечка в глобальный охват .

Я также полностью вижу значение управления зависимостями ресурсов, предусмотренное в протоколе require(), изложенном в спецификации CommonJS .

Тем не менее, я озадачен преимуществами использования и цели функции AMD define().

Подпись CommonJS для define:

define(id?, dependencies?, factory);

Дополнительно ...

Сначала это "казалось" как еще одна оболочка для плагинов ... пока я не увидел, что люди используют ее вместе с Модулем шаблонов.

Итак, мои вопросы:

  • Что означает протокол define() изложенные в спецификации CommonJS купить меня?
  • Это как-то более красноречиво?
  • Это должно заменить модульный шаблон?
  • Это как-то быстрее?
  • Если так, то почему?

1 Ответ

2 голосов
/ 19 мая 2011
// main.js
require("foo.js", function(foo) {
    console.log(foo === 42); // true
});

//foo.js

/*
define(42);

define({
   "foo": "bar"
});

define(["bar.js"], function(bar) {
    return bar.foo;
});
*/

define(function() {
     return 42;
});

Определение - отличный способ передать модульные объекты обратно, не полагаясь на глобальную область видимости.

Конкретный API определения варьируется от библиотеки к библиотеке.

Здесь основная идея состоит в том, что вы вызываете define в файле, чтобы определить, что это за модуль. Затем, когда вам требуется файл, вы получаете модуль. Это отрезает среднего человека, который является глобальным охватом.

Это не быстрее, хотя (это медленнее, чем ввод в глобальную область).

Используя require и define, у вас есть только два глобальных значения.

Конкретный пример define, приведенный выше, соответствует requireJS API

...