В JavaScript функции являются первоклассными объектами. Это означает, что вы можете передавать функции как параметры функции или рассматривать их как переменные в целом.
Допустим, речь идет о функции hello
,
function hello() {
alert('yo');
}
Когда мы просто пишем
hello
мы имеем в виду функцию, которая не выполняет ее содержимое. Но когда мы добавляем символы ()
после имени функции,
hello()
тогда мы на самом деле вызываем функцию, которая на экране выдаст предупреждение "йо".
Метод bind
в jQuery принимает тип события (строка) и функцию в качестве аргументов. В вашем примере вы передаете тип - «click» и фактическую функцию в качестве аргумента.
Вы видели Начало? Рассмотрим этот надуманный пример, который может прояснить ситуацию. Поскольку функции являются первоклассными объектами в JavaScript, мы можем передавать и возвращать функцию изнутри функции. Итак, давайте создадим функцию, которая возвращает функцию при вызове, а возвращенная функция также возвращает другую функцию при вызове.
function reality() {
return function() {
return function() {
alert('in a Limbo');
}
};
}
Здесь reality
- функция, reality()
- функция, а reality()()
- также функция. Однако reality()()()
- это не функция, а просто undefined
, поскольку мы не возвращаем функцию (мы ничего не возвращаем) из самой внутренней функции.
Так что для примера функции reality
вы могли бы передать в привязку jQuery любое из следующего:
$('#foo').bind('click', reality);
$('#foo').bind('click', reality());
$('#foo').bind('click', reality()());