Экспорт модуля библиотеки JQuery

Я пытаюсь понять, как jQuery устанавливает сам.

в самом начале jQuery автоматически вызывает функцию, которая экспортирует модуль.

как работает настройка?

вот несколько более подробных под-вопросов, которые могут ответить на более общий вопрос:

  • в чем польза рекурсивного вызова function(w) at module.exports?
  • какая польза от noGlobal переменной?
  • где factory на самом деле установить и каков его тип?
  • почему

1 ответов


в чем польза рекурсивного вызова function(w) at module.exports?

это не рекурсивный вызов, скорее отложенная функция инициализации. В некоторых средах CommonJS, таких как Node.JS, глобальный объект не имеет document свойство, в то время как другие, такие как Browserify и Webpack.

jQuery требует document свойство для инициализации, поэтому сначала проверьте, содержит ли глобальный объект document собственность. Если да, то инициализирует немедленно, делая в браузере среды CommonJS счастливыми. Если это не так, он возвращает функцию, которая может быть использована для последующей инициализации jQuery. Эта функция позже может быть вызвана в поддельном окне, создавая что-то вроде jsdom.


какая польза от noGlobal переменной?

на noGlobal переменная используется здесь.

отрывок из в jQuery:

// 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.