2012-03-23 3 views
0

Так что есть, кажется, что-то вроде этого сегодня:Почему пользовательская функция?

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

В чем разница между этим и следующим образом:

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

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

+2

... не используя функцию literal, выдает синтаксическую ошибку, потому что произвольный JavaScript не может быть встроен в круглые скобки? – Ryan

+1

Вы _could_ определяете внешнюю функцию и передаете ее каждому так: 'function foo() {alert ('foo!')}; $ ('. input'). each (foo); 'ИЛИ вы могли бы сделать анонимную функцию и передать ее так же, как в первом примере:' $ ('. input'). each (function() {alert ('foo!')}); ' – rcplusplus

+0

@minitech, так что вы говорите, я могу иметь что-то вроде этого? $ (что-то) .each (a = b; c = d; e = f); – Churk

ответ

2

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

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

Эта функция предупредит «тест», потому что foo определяется в пределах своей области.

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

function b() { 
    alert(foo); 
} 

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

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

1

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

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

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

+0

Таким образом, функция позволяет вам передавать больше параметров, таких как $ (a) .each (function (c) {// делать что-то с c}); где я не мог иначе. Ahhhh, спасибо – Churk

2

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

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

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

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

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

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

+0

.each - это просто что-то, что я выбрал в качестве примера, но вы правы. .each() - это обратный вызов, но, похоже, это работает с функцией повторного обратного вызова. – Churk

Смежные вопросы