NOTICE: This is indeed too long, but I hope someone finds it helpful.
Для начала:.. $
(или jQuery
, они, как правило, то же самое) является функцией На ваших первых двух примерах, вы «вызов этой функции, передавая ей ссылку на анонимную функцию. Это ярлык jQuery для добавления переданной функции в качестве« event.ready »event eventener (фактическое имя события DOMContentLoaded
в совместимых браузерах).
JavaScript имеет три способа создания функций:
1. Объявление функции
function foo() {
// code
}
В заявлении, функция всегда должна быть названа. В этом случае имя функции «foo».
2. Функция выражения
Может быть названа или нет. Обычно они анонимны. Они будут считаться недействительными синтаксисом в зависимости от положения, которое они отображаются в коде. Например, это ошибка синтаксиса:
// syntax error
function() {
// code
}
Но это не так:
// passing a function expression is fine
foo(function() {
// code
});
Это также справедливо:
// parentheses make it an expression too
(function() {
// code
});
Это тоже:
// the negation operator also makes it be interpreted as an
// expression, instead of a syntax error
!function() {
// code
}
Два предыдущих примера обычно используются для немедленного LY вызова функции:
!function() {
alert('invoked')
}();
(function() {
alert('invoked')
}());
Изолированные, без призывающих скобки, они в значительной степени бесполезными, так как ссылки на вновь созданной функции сразу теряется, если мы не будем приписывать его к чему-либо.
Это с другой стороны, это очень полезно:
// function expressions are fine on the right-hand-side of an assignment
var fn = function() {
// code
}
3. С помощью конструктора Function
// This is similar to 'eval'
// the string you pass will be the body of the function
var fn = new Function("return true");
Вы также сказал, что вы смущены о функциях и переменных, которые дон существует в определенном контексте. Это из-за области: в JavaScript, каждая функция создает новую область.Если вы создадите переменную (объявленную с помощью var
) или другую функцию (используя любые допустимые варианты выше), эта переменная или функция не будут видны вне функции, в которой она была объявлена. Но они будут видны внутри других вложенных функций, определенных в той же области (вложенные функции «закрываются», они являются внешней областью, и поэтому их обычно называют «замыканиями»).
не забудьте '$ .fn.openACSelect = функция() {};', который позволяет определить свои собственные методы JQuery. –