Почему пользовательская функция? - PullRequest
0 голосов
/ 23 марта 2012

Итак, сегодня это выглядит примерно так:

$$('input').each(function() {
 // do something
});

В чем разница между этим и этим:

$$('input').each( // do something );

Закрытая функция в первом примере находится внутри функции для области видимости цикла, так что она нигде больше не может ссылаться, так в чем ее преимущество?

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Это не приватная функция, это просто анонимная функция (функция без имени).

Вы можете сделать:

$('input').each(function() {
 // do something
});

Или вы можете сделать:

function foo() {
 // do something
}
$('input').each(foo);

В любом случае, метод .each нуждается в функции, которая будет параметром, который является обратным вызовом.

2 голосов
/ 23 марта 2012

Анонимная функция знает свою текущую область действия и переменные.

function a() {
   var foo = 'test';
   $('something').each(function() {
      alert(foo);
   })
}

Эта функция выдаст предупреждение 'test', поскольку в ее области определено foo.

function a() {
   var foo = 'test';
   $('something').each(b)
}

function b() {
   alert(foo);
}

Эта функциявызовет ошибку javascript, сообщающую, что переменная foo не определена.

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

1 голос
/ 23 марта 2012

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

Вторая функция - это почти то же самое, но единственное, что вы можете сделать, это предоставить ей имя функции, иначе вы получите синтаксическую ошибку.

Краткий ответ: Вы помещаете туда оператор функции, чтобы сделать больше, чем одну вещь, или делаете одну вещь и предоставляете параметры.

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