Передача функций в jQuery с отсутствующими параметрами - PullRequest
2 голосов
/ 28 июля 2011

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

Например, в функции .each() она принимает функцию с параметрами index,Element. Однако вы можете использовать для него меньше параметров, чем показано в первом примере в документации : $('li').each(function(index){...}.

Когда это действительно? И почему это синтаксически верно?

Ответы [ 5 ]

6 голосов
/ 28 июля 2011

В Javascript вам не нужно передавать все параметры функции. Если вы не передадите его, его значение по умолчанию будет неопределенным.

3 голосов
/ 29 июля 2011

Что делает jQuery, так это проверяет тип переданных вами параметров и выясняет, что вы имели в виду.Это дает вам некоторую гибкость в том, что вы включаете.Это работает только тогда, когда ожидаемые параметры имеют другой тип.Например, если у вас есть три возможных параметра для функции: строка, число и функция, тогда принимающая функция может проверить тип каждого параметра и выяснить, какой именно, независимо от того, в каком порядке они переданы или какие

В jQuery, как правило, есть только один параметр, который является функцией, поэтому jQuery может найти его, независимо от того, где он находится в списке параметров.

Если, с другой стороны,С другой стороны, функция взяла в качестве параметров две строки или две функции, тогда они должны были бы быть переданы в правильном порядке, чтобы принимающая функция могла знать, какой был какой.

Это может работать в javascript, потому что:

  1. Если параметр не передается в функцию, javascript просто устанавливает результирующий аргумент функции в значение «undefined», позволяя вызывающей функции видеть, что она отсутствовала при вызове.
  2. Javascript позволяетодин для изучения типов переменных, так что в этом случае вызывающая функция может выглядетьна различные типы того, что было передано, и измените его поведение.

Если вы посмотрите на функцию click (), вы увидите, что jQuery имеет три возможных способа ее использования:

.click()
.click( handler(eventObject) )
.click( [eventData,] handler(eventObject) )

Внутренне, функция щелчка в jQuery объявляется так:

function (data, handler)

Затем, когда эта функция вызывается, jQuery просматривает данные параметров и обработчик и определяет, что если оба параметра не определены, то вызывающая сторонадолжно быть сделано:

.click();

Если только параметр обработчика не определен, а параметр data определен и является типом функции, то вызывающая сторона должна использовать вторую форму:

.click(handler)

В этом случае jQuery внутренне делает это, чтобы поместить параметры в правильные слоты перед их использованием:

handler = data;
data = null;

Если оба параметра не определены, то вызывающая сторона должна была использовать:

.click(data, handler)

и он может использовать оба параметра, как объявлено.

1 голос
/ 28 июля 2011

Это особенность JavaScript, а не jQuery.Вы можете передать любое количество параметров при вызове.Теперь зависит от функции, что вы ищете.Также вы можете получить параметр функции, используя ключевое слово arguments.

1 голос
/ 28 июля 2011

Это всегда верно. Объявление функции в JavaScript предоставляет имена для параметров, но в остальном не ограничивает способ вызова функции. Другими словами, функции не имеют «сигнатуры типа», как в некоторых других языках.

Функция всегда может быть вызвана с любым количеством параметров, независимо от того, как она была определена.

0 голосов
/ 28 июля 2011

Это всегда верно.В JavaScript вы можете вызвать любую функцию с большим или меньшим количеством параметров, чем определено.Таким образом, ваша функция с именем без параметров все равно получит эти два параметра.Вы даже можете увидеть значение параметров, используя arguments.arguments[0] будет index и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...