JavaScript выполняется в порядке, они определены на странице (хотя они могут загружаться в любом порядке). Это означает, что перед выполнением этой операции должен быть загружен любой сценарий, требуемый некоторой операцией. Предположим, вы выполняете функцию, скрипт, содержащий эту функцию, должен быть загружен перед скриптом, который его использует. Теперь проблема заключается в том, что вы должны знать порядок загрузки этих скриптов, иначе ошибочно упорядоченный скрипт приведет к сбою всего приложения.
Перед тем, как AMD, давайте поговорим о модулях. Как и в мире Linux, программе нужны другие библиотеки для работы (называемые зависимостями). И чтобы эти программы работали, зависимости должны быть загружены вместе с программой, которую вы действительно хотели. Точно так же и во всех веб-приложениях сегодня. Они построены из нескольких простых библиотек, таких как jQuery, Backbone и т. Д. Но как вы справляетесь с ними без лидера кольца?
Здесь поступает AMD. AMD - спецификация для загрузчиков модулей (вроде как менеджеров зависимостей для программ). Они находят зависимости модуля, загружают их перед загрузкой фактического модуля, который вы хотите запустить.
Предположим, что для моего приложения требуется jQuery, jQuery UI, BackboneJS. Драйвер загрузчика AMD гарантирует, что эти 3 загрузятся до того, как мой код начнет их использовать, и без использования кучи скриптовых тегов перед вашим фактическим кодом.
На самом деле вам нужен только один тег сценария на странице - загрузчик сценариев. И с загрузчиками, такими как RequireJS, он только находит ваш «главный скрипт», выполняет его, и все автоматически загружает остальное с этой точки.
Грубый пример, как это:
//all you need in the page is your script loader
<script data-main-script="path_to_main_script" src="scriptloader.js"></script>
//then in the main script, you have this code which loads the set of
//dependencies before calling the callback.
require(['jQuery','underscore'],function($,_){
//i am now sure that in here, i have access to jQuery ($) and underscore (_)
}
//example, we define an ajax module that needs jQuery
//we load jQuery as our dependency
define(['jQuery'],function($){
//we can now use jQuery for our ajax module
}
в требуют ([ 'Подчеркивание' 'JQuery'], функция ($ _) {} - А JQuery и подчеркивание загруженная в том, что Если функция в подчеркивании использует jQuery, будет ли она работать должным образом? –
@AnkurMarwaha В этом случае подчеркивание _depends_ на jQuery. Подчеркивание должно определять jQuery как его зависимость для загрузки jQuery. Это не ваш код, который должен будьте обеспокоены этим. Кроме того, зависимости в этом массиве не загружаются и не выполняются в этом порядке. – Joseph