1. Это называется анонимной функцией, которая работает немедленно (также называется функцией, которая вызывает немедленно)
2. Когда анонимная функция прилагается, а затем к задней части добавляется кронштейн, анонимную функцию можно запустить немедленно! Есть что -то волшебное?
3. Чтобы использовать функцию, мы должны сначала объявить ее существование. Наиболее распространенным способом, который мы используем, является определение функции с использованием оператора функции
4. Функциональный объект
Функциональные объекты являются присущими объектами в JavaScript, и все функции на самом деле являются объектом функции.
Давайте сначала посмотрим, может ли функциональный объект напрямую использовать конструктор для создания новой функции? Ответ да.
var abc = новая функция ("x", "y", "return x*y;"); предупреждение (ABC (2,3)); // "6"5. Анонимные функции не имеют имен, поэтому они распространяются на вопрос о том, как мы должны их называть (O_O)?
Призыв анонимных функций
var abc = function (x, y) {return x+y; } оповещение (ABC (2,3)); // "5"Приведенная выше операция фактически эквивалентна определению функции по -другому. Это использование - это то, с чем мы сталкиваемся чаще.
Например, когда мы настраиваем функцию обработчика событий элемента DOM, мы обычно не называем их, а вместо этого даем его соответствующее событие ссылку на анонимную функцию.
Вызов анонимной функции
Используйте (), чтобы приложить анонимную функцию, а затем добавить пару кронштейнов (включая список параметров).
Alert ((новая функция ("x", "y", "return x*y;")) (2,3)); // "6"6. Какова роль кронштейнов?
Кроншеты могут разделить наши выражения на кусочки, и каждая часть, то есть каждая пара скобков, имеет возвратное значение. Это возвращаемое значение на самом деле является возвратным значением выражения в скобках.
Поэтому, когда мы включаем анонимную функцию с парой кронштейнов, скобки возвращают объект функции анонимной функции.
Следовательно, добавление анонимных функций в пару кронштейнов похоже на именованную функцию, и мы получаем ее эталонную позицию. Поэтому, если вы добавите список параметров после этой эталонной переменной, будет реализована форма вызова обычной функции.
7. Объявления функций, выражения функций, анонимные функции
Объявление функции: function fnname () {…}; Используйте ключевое слово функции, чтобы объявить функцию, а затем укажите имя функции, называемое объявлением функции.
Функция выражения var fnname = function () {…}; объявить функцию с использованием ключевого слова функции, но не называет функцию. Наконец, анонимной функции присваивается переменная, называемая экспрессией функции, которая является наиболее распространенной формой синтаксиса экспрессии функции.
Анонимная функция: function () {}; Используйте ключевое слово функции, чтобы объявить функцию, но функция не называется, поэтому оно называется анонимной функцией. Анонимные функции принадлежат к выражениям функций. Анонимные функции имеют много функций. Если вы назначаете переменную, вы создаете функцию, и если вы назначаете событие, вы становитесь обработчиком событий или создаете закрытие и т. Д.
Разница между объявлением функции и выражением функции заключается в том, что
1. Когда двигатель JavaScript анализирует код JavaScript, он будет «декларацией функции поднятия» (Объявление функции поднятия функции) Объявление функции в текущей среде выполнения (Scope). Функциональные выражения должны ждать, пока двигатель Javascirtp не выполнится на свою линию, прежде чем анализировать выражение функции сверху в нижнюю линию.
2. Выражение функции можно сразу же вызвать с помощью скобков после этого. Объявление функции не может быть сделано и может быть вызвано только в форме fnname ().
Каштан
fnname (); function fnname () {...} // нормальный, потому что «продвижение» объявления функции, вызов функции может быть fnname (); var fnname = function () {...} // Сообщается о ошибке, переменная fnnamКаштан
var fnname = function () {alert ('hello world');} (); // посылки добавляются после выражения функции. Когда здесь анализируется двигатель Javascript, функцию можно назвать немедленно, когда Funname () {alert ('Hello World');} (); // Не будет ошибки, но двигатель JavaScript не будет отозвать функцию функции (). } (); // Ошибка синтаксиса, хотя анонимные функции принадлежат к выражениям функций, операция назначения не выполняется, // поэтому двигатель JavaScript рассматривает ключевое слово функции в начале как объявление функции, и сообщает об ошибке: требуется имя функцииЕсли вы хотите добавить кронштейны после корпуса функции, вы можете вызвать его немедленно, то эта функция должна быть выражением функции, а не объявлением функции.
Каштан
(function (a) {console.log (a); // Выход Firebug 123, используйте () оператор ()) (123); (function (a) {console.log (a); // Выход Firebug 1234, используйте () оператор} (1234));! Функция (a) {console.log (a); // Выход Firebug 12345, используйте! Оператор} (12345); +function (a) {console.log (a); // Выход Firebug 123456, используйте + оператор} (123456); -function (a) {console.log (a); // Выход Firebug 1234567, использование - оператор} (1234567); var fn = function (a) {console.log (a); // Выход Firebug 12345678, использование = оператор} (12345678)Вы можете увидеть выходной результат и добавить его перед функцией! , +, - и даже запятые можно использовать для выполнения сразу после определения функции, и (),! Операторы, такие как +, -, = конвертировать объявления функций в выражения функций, устраняя неоднозначность между эксплуатационными выражениями и объявлениями функции, сообщив оборота, сообщая двигателю JavaScript, что это является выражением функции, а не объявлением функции, вы можете добавить скобки после его сразу же и выполнить код функции.
Добавление кронштейнов - самый безопасный способ сделать это, потому что! Операторы, такие как, +, и - также будут выполнять операции с возвращающим значением функции, что иногда вызывает ненужные проблемы.
Но каково использование написания таким образом?
В JavaScript нет концепции частного объема. Если вы объявите некоторые переменные в глобальном или местном объеме по проекту, разработанному несколькими людьми, он может быть перезаписан другими с тем же именем. В соответствии с характеристиками цепочки объема функций JavaScript, этот метод может использоваться для имитации частного объема и использования анонимной функции в качестве «контейнера». «Контейнер» может получить доступ к внешним переменным, в то время как внешняя среда не может получить доступ к переменным внутри «контейнера», поэтому переменные, определенные внутри (function () {…}) () не будут конфликтовать с внешними переменными, обычно известными как «анонимная обертка» или «пространство имен».
JQuery использует этот метод. Когда код jQuery обернут в (функция (window, undefined) {… jQuery код…} (окно), он может защитить внутренние переменные jQuery при вызове кода jQuery в глобальном объеме.