где - определение переменной & ldquo; module & rdquo; и & ldquo; noGlobal & rdquo; в исходном коде jQuery? [Дубликат]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

8
задан Alexander O'Mara 11 May 2015 в 03:55
поделиться

1 ответ

Каково использование рекурсивного вызова function(w) в 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 - undefined, jQuery добавит себя к глобальному объекту window. Единственный раз, когда он этого не сделает, будет загружен загрузчиком CommonJS со свойством document на глобальном объекте, таким как Browserify или Webpack. Ниже приведен вызов: noGlobal не undefined.

factory( global, true )

Где действительно установлен factory и каков его тип?

< / blockquote>

Переменная factory является function, и она заявлена ​​здесь:

function( window, noGlobal ) {

Это второй аргумент, переданный в IIFE .


Почему аргумент factory вызывается с одним аргументом и с двумя?

Поскольку JavaScript.

В JavaScript нет требования сопоставлять количество аргументов, объявленных функцией. Любые опущенные аргументы имеют значение undefined.


Что должен содержать аргумент global? (Мне жаль, что не было такого типа, как в c ++ ...)

Предполагается, что он содержит глобальный объект для среды JavaScript. В браузере этот объект известен как window, а в узле этот объект известен как global. В обеих средах использование this в глобальной области будет разрешено для глобального объекта, независимо от его глобального имени.

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

typeof window !== "undefined" ? window : this

еще один вопрос: где аргумент w, исходящий из?

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

16
ответ дан Alexander O'Mara 19 August 2018 в 05:05
поделиться
  • 1
    еще один вопрос: откуда идет аргумент w? – Beginner 12 May 2015 в 11:30
  • 2
    @Beginner Когда глобальный объект не содержит document, он возвращает функцию, которая принимает один аргумент, w. Этот объект будет window -подобным объектом с document, который может быть создан с помощью чего-то вроде jsdom. – Alexander O'Mara 12 May 2015 в 14:13
  • 3
    – Beginner 12 May 2015 в 15:36
  • 4
    Не совсем. Когда jQuery не имеет глобального документа, он вместо этого возвращает функцию, которая впоследствии может быть использована для инициализации jQuery. Для этого вы вызываете эту функцию и передаете в оконный объект, который вы хотите инициализировать. Окноподобный объект - это то, что вам нужно было бы создать, с чем-то вроде jsdom и передать, когда вы захотите его инициализировать. Что-то вроде этого: var $ = require('jquery')(myFakeWindow);, где myFakeWindow - созданный вами оконный объект. – Alexander O'Mara 12 May 2015 в 16:09
  • 5
    Хорошо, я понял: w является аргументом функции, определенной именно в этом месте. Это свободная переменная, которую не нужно определять в этот момент, не так ли? – Beginner 12 May 2015 в 16:13
Другие вопросы по тегам:

Похожие вопросы: