Экспорт модуля библиотеки JQuery
Я пытаюсь понять, как jQuery устанавливает сам.
в самом начале jQuery автоматически вызывает функцию, которая экспортирует модуль.
как работает настройка?
вот несколько более подробных под-вопросов, которые могут ответить на более общий вопрос:
- в чем польза рекурсивного вызова
function(w)atmodule.exports? - какая польза от
noGlobalпеременной? - где
factoryна самом деле установить и каков его тип? - почему
1 ответов
в чем польза рекурсивного вызова
function(w)atmodule.exports?
это не рекурсивный вызов, скорее отложенная функция инициализации. В некоторых средах CommonJS, таких как Node.JS, глобальный объект не имеет document свойство, в то время как другие, такие как Browserify и Webpack.
jQuery требует document свойство для инициализации, поэтому сначала проверьте, содержит ли глобальный объект document собственность. Если да, то инициализирует немедленно, делая в браузере среды CommonJS счастливыми. Если это не так, он возвращает функцию, которая может быть использована для последующей инициализации jQuery. Эта функция позже может быть вызвана в поддельном окне, создавая что-то вроде jsdom.
какая польза от
noGlobalпеременной?
на noGlobal переменная используется здесь.
// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
window.jQuery = window.$ = jQuery;
}
по сути, если noGlobal is undefined, jQuery добавит себя к глобальному , из-за некоторых сторонних оболочек, которые могут изменить область, в которой инициализируется jQuery, jQuery сначала проверит, если window объект доступен и использовать его, если он есть. Если не использовать, по умолчанию используется this.
typeof window !== "undefined" ? window : this
еще один вопрос: откуда исходит аргумент w?
когда глобальный объект не содержит document, он возвращает функцию, которая принимает один аргумент -w. Этот объект будет window-как объект с document это может быть создано с чем-то вроде jsdom.