Экспорт модуля библиотеки 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.