В этой статье анализируются методы создания и вызова анонимных функций в JS. Поделитесь этим для вашей ссылки. Конкретный метод реализации следующим образом:
Анонимные функции - это функции без имен, также называемых закрытиями, которые позволяют временно создавать функцию без указанного имени. Чаще всего используется в качестве значения для параметров обратного вызова, многие новички не знают об анонимных функциях. Давайте проанализируем это здесь.
Имя функции функции (список параметров) {Function Body;}
Если вы создаете анонимные функции, это должно быть:
function () {function Body;}
Поскольку это анонимная функция, обычно нет никаких параметров.
Зачем создавать анонимные функции? При каких обстоятельствах будут использоваться анонимные функции? Существует два общих сценария для анонимных функций, один из них - функция обратного вызова, а другой - напрямую выполнить функцию.
Функции обратного вызова, такие как асинхронные операции Ajax, требуют функций обратного вызова. Я не буду объяснять это подробно здесь. Что касается непосредственного выполнения функций, я пойму это после просмотра примера:
Скопируйте код следующим образом: <script language = "javascript">
var a = "a";
(function () {
var a = "b";
предупреждение (а);
}) ();
предупреждение (а);
</script>
В приведенном выше коде два ящика оповещения будут выводиться в последовательности. Содержание первой коробки оповещений B, а второй - это. Вы видели какие -либо преимущества? Прямо, использование функции может ограничить объем переменных, чтобы могли сосуществовать одни и те же переменные в разных сценариях.
Ниже давайте сначала поймем концепции, связанные с анонимными функциями.
Функциональные операторы. Чтобы использовать функцию, мы должны сначала заявить о ее существовании. Наиболее распространенным способом, который мы используем, является определение функции с использованием операторов функций, таких как:
Скопируйте код следующим образом: function abc () {
// код для обработки
}
function abc () {// код для обработки}
Конечно, ваша функция также может быть с параметрами или даже с возвратными значениями.
Кода кода следующим образом: Просмотреть Plaincopy в буфер обмена отпечатка?
Функция abc (x, y) {
вернуть x+y;
}
Функция abc (x, y) {return x+y; }
Однако, независимо от того, как вы определяете свою функцию, интерпретатор JS переведет ее в функциональный объект. Например, вы определяете номер функции одного из приведенных выше примеров и вводите следующий код:
Скопируйте код следующим образом: Alert (typeof abc); // "Функция"
Ваш браузер всплывает коробку с приглашением, что предложит вам, что ABC является функциональным объектом. Так что же именно объект функции?
Функциональный объект
Функциональный объект является присущим объектом в JavaScript, и все функции на самом деле являются объектом функции. Давайте сначала посмотрим, может ли функциональный объект напрямую использовать конструктор для создания новой функции? Ответ да. Например:
Кода кода выглядит следующим образом: var abc = новая функция ("x", "y", "return x*y;");
предупреждение (ABC (2,3)); // "6"
Я считаю, что каждый должен иметь некоторое понимание того, как провозгласить функцию сейчас. Так что же такое анонимная функция?
Объявить анонимные функции
Как следует из названия, анонимные функции являются функциями без реальных имен. Например, мы удаляем имя функции в приведенном выше примере, а затем определяем, является ли она функцией:
Скопируйте код следующим образом: alert (typeof function () {}); // "Функция"
alert (typeof function (x, y) {return x+y;}); // "function"
Alert (TypeOf новая функция ("x", "y", "return x*y;")) // "функция"
Alert (typeof function () {}); // "Функция"
alert (typeof function (x, y) {return x+y;}); // "function"
Alert (TypeOf новая функция ("x", "y", "return x*y;")) // "функция"
Мы можем легко увидеть, что все они являются функциональными объектами, другими словами, все они являются функциями, но все они имеют одну характеристику - без имен. Таким образом, мы называем их «анонимными функциями». Однако именно потому, что у них нет «имени», у нас нет возможности их найти. Это расширяет вопрос о том, как вызвать анонимную функцию.
Вызов анонимной функции
Чтобы вызвать функцию, у нас должен быть метод, чтобы найти ее и ссылаться на ее. Итак, нам нужно найти имя для него. Например:
Скопируйте код следующим образом: var abc = function (x, y) {
вернуть x+y;
}
предупреждение (ABC (2,3)); // "5"
Приведенная выше операция фактически эквивалентна определению функции по -другому. Это использование - это то, с чем мы сталкиваемся чаще. Например, когда мы настраиваем функцию обработчика событий элемента DOM, мы обычно не называем их, а вместо этого даем его соответствующее событие ссылку на анонимную функцию.
На самом деле есть еще один способ вызвать анонимные функции, которые представляют собой фрагмент jQuery, который мы видим - используйте (), чтобы приложить анонимные функции, а затем добавить пару кронштейнов (включая списки параметров). Давайте посмотрим на следующие примеры:
Скопируйте код следующим образом: alert ((function (x, y) {return x+y;}) (2,3)); // "5"
Alert ((новая функция ("x", "y", "return x*y;")) (2,3)); // "6"
Многие люди могут задаться вопросом, почему этот метод может быть успешно назвать? Если вы думаете, что это приложение странное, пожалуйста, ознакомьтесь с моим объяснением ниже.
Вы знаете роль кронштейнов? Кроншеты могут разделить наши выражения на кусочки, и каждая часть, то есть каждая пара скобков, имеет возвратное значение. Это возвращаемое значение на самом деле является возвратным значением выражения в скобках. Поэтому, когда мы включаем анонимную функцию с парой кронштейнов, скобки возвращают объект функции анонимной функции. Следовательно, добавление анонимных функций в пару кронштейнов похоже на именованную функцию, и мы получаем ее эталонную позицию. Поэтому, если вы добавите список параметров после этой эталонной переменной, будет реализована форма вызова обычной функции.
Я не знаю, можете ли вы понять приведенный выше текст. Если вы все еще не можете понять это, посмотрите на следующий код и попробуйте его.
Скопируйте код следующим образом: var abc = function (x, y) {return x+y;}; // назначить объект анонимной функции ABC
// Конструктор ABC такой же, как конструктор анонимных функций. То есть реализация двух функций одинакова.
alert ((abc) .constructor == (function (x, y) {return x+y;}). Конструктор);
PS: Конструктор относится к функции, которая создает объект. То есть корпус функции, представленная объектом функции.
Короче говоря, понимайте его (анонимная функция, содержащаяся в скобках) как объект функции, возвращаемый выражением кронштейна, а затем вы можете сделать нормальный вызов списка параметров для этого объекта функции. (Я совершил ошибку здесь ранее. Только выражения функций не могут быть вызваны непосредственно. Удалить кронштейны анонимных функций и должны быть назначены с выражением. То есть (function () {alert (1)}) () должен быть эквивалентен a = function () {alert (1)} () и даже не может удалить a =.
Закрытие
Что такое закрытие? Закрытие ссылается на кодовые блоки на определенном языке программирования, который позволяет существовать функции первого уровня, и не могут быть выпущены свободные переменные, определенные в функции первого уровня. До тех пор, пока не будет выпущена функция первого уровня, эти неизданные свободные переменные могут быть применены вне функции первого уровня.
как? Это было потоотделение ... это было нормально, так и я (хотя я понимаю, это была просто вопрос самовыражения). Давайте объясним это более простым образом: закрытие на самом деле является языковой функцией. Это относится к языку программирования, который позволяет рассматривать функции как объекты, а затем переменные экземпляра (локальные) могут быть определены в таких функциях, как операции в объектах. Эти переменные могут быть сохранены в функциях до тех пор, пока объект экземпляра функции не будет уничтожен. Другие блоки кода могут каким -то образом получить значения этих переменных экземпляра (локальный) и применять их к приложению.
Я не знаю, будет ли это яснее после объяснения этого пути. Если вы все еще не понимаете, давайте упростим это: закрытие фактически ссылается на локальные переменные, определенные в функциях выполнения на языке программирования.
Теперь давайте посмотрим на пример:
Скопируйте код следующим образом: var abc = function (y) {
var x = y; // Это локальная переменная
return function () {
Alert (x ++); // Это то, где x вызывается в локальной переменной функции первого уровня в функции закрытия и работает на ней.
Alert (y-); // Переведенная переменная параметра также является свободной переменной
}} (5); // Инициализация
ABC (); // "5" "5"
ABC (); // "6" "4"
abc (); // "7" "3"
оповещение (x); // ошибка! «X» не определено!
Увидев это, можете ли вы сказать, является ли фрагмент кода jQuery закрытие?
На мой взгляд, давайте поговорим об этом. Применяется ли функция закрытия, необходимо определить, является ли наиболее важным элементом этого кода: незамеченные локальные переменные. Тогда очевидно, что невозможно применить функцию закрытия без какой -либо реализации. Но что, если в анонимной функции есть реализация? Также необходимо определить, есть ли в ее реализации неразрушенные локальные переменные. Итак, если вы спросите, какие функции в JS используются в начале фрагмента кода jQuery? Тогда это просто призыв к анонимным функциям и анонимным функциям. Однако это подразумевает характеристики закрытия и может быть реализовано в любое время.
Наиболее распространенное использование:
Скопируйте код следующим образом: (function () {
блюда ('вода');
}) ();
Конечно, параметры также могут быть включены:
Скопируйте код следующим образом: (function (o) {
предупреждение (O);
})('вода');
Хотите использовать цепные вызовы с анонимными функциями? Очень просто:
Скопируйте код следующим образом: (function (o) {
предупреждение (O);
вернуть Arguments.callee;
}) ('вода') ('вниз');
Вы знаете все общие анонимные функции, давайте посмотрим на необычные:
Скопируйте код следующим образом: ~ (function () {
блюда ('вода');
}) (); // Написание немного круто ~
void function () {
блюда ('вода');
} (); // Говорят, что наиболее эффективно ~
+function () {
блюда ('вода');
} ();
-function () {
блюда ('вода');
} ();
~ function () {
блюда ('вода');
} ();
! function () {
блюда ('вода');
} ();
(function () {
блюда ('вода');
} ()); // немного принудительного исполнения ~
Я надеюсь, что эта статья будет полезна для каждого программирования JavaScript.