Причина написания:
При написании функций в JS мы обычно объявляем функцию в форме функции соглашения fn () {}. При чтении некоторых отличных плагинов мы не можем не увидеть создание таких функций, как var fn = function () {}. В чем разница между ними? Сегодня мы поговорим об этом захватывающем утверждении функции в духе разрушения запеканки до конца.
Функциональное объявление
Пример декларации функции код
Кода -копия выглядит следующим образом:
функция fn () {
console.log ('fn function execution ..');
// код ..
}
Таким образом, мы объявляем функцию с именем FN. Вот мысль. Как вы думаете, это будет выполнено, если она будет вызвана этой функцией? Или будет сообщена ошибка?
fn (); // Вызовите функцию FN, которую мы объявили ранее
Кода -копия выглядит следующим образом:
функция fn () {
console.log ('fn function execution ..');
// код ..
}
Результат вывода консоли:
Да, функция FN может быть вызвана в настоящее время, поэтому давайте обобщут здесь причины.
Суммировать:
1: В настоящее время функция FN является результатом переменной и хранится в переменной в глобальном контексте по умолчанию (может быть проверено окном. Имя функции)
2: Этот метод является объявлением функции, и они уже доступны при входе на глобальную стадию контекста и вступление в стадию выполнения кода. PS: JavaScript будет инициализировать контекстную среду каждый раз, когда она входит в метод (из Global → Local)
3: это может повлиять на переменные объекты (только переменные влияют на контекст)
Функциональные выражения
Образец экспрессии экспрессии
Кода -копия выглядит следующим образом:
var fn = function () {
console.log ('fn function [Expression] объявляет выполнение ...')
// код ..
}
Итак, мы объявляем анонимную функцию и указываем ее ссылку на переменную FN?
Опять же, назовите его один раз выше и ниже функций, объявленных этим выражением, чтобы увидеть выходные результаты консоли.
Кода -копия выглядит следующим образом:
// Чтобы четко увидеть вывод консоли, мы делаем след до и после каждого вызова, чтобы увеличить читаемость.
console.log ('до начала вызова ...');
fn ();
console.log ('предыдущий звонок заканчивается ...');
var fn = function () {
console.log ('fn function [Expression] объявляет выполнение ...')
// код ..
}
console.log ('звонок начинается после этого ...');
fn ();
console.log ('звонок начинается после этого ...');
Результаты консольной печати:
Вы можете видеть, что когда код выполняется впервые, когда вызывается функция fn (), подсказка: Fn не является функцией (FN не является методом), а операция завершается, когда она сталкивается с ошибкой.
Это показывает, что когда fn () вызывает впервые, переменная Var fn не существует как свойство глобального объекта, а контекст анонимной функции, на который ссылается FN, не инициализируется, поэтому вызов не удался перед ним.
Кода -копия выглядит следующим образом:
// теперь сначала прокомментируйте предыдущую логику вызова, а затем посмотрите на вывод консоли
// console.log ('до начала вызова ...');
// fn ();
// console.log ('предыдущий вызов заканчивается ...');
var fn = function () {
console.log ('fn function [Expression] объявляет выполнение ...')
// код ..
}
console.log ('звонок начинается после этого ...');
fn (); // Вызовите после выражения
console.log ('звонок начинается после этого ...');
Результаты консольной печати:
Видно, что после нее можно назвать функцию выражения. Давайте обобщу, почему?
Суммировать:
1: Во -первых, сама переменная не существует как функция, а ссылка на анонимную функцию (тип значения не принадлежит ссылке)
2: На этапе выполнения кода при инициализации глобального контекста он не существует как глобальный атрибут, поэтому он не вызовет загрязнение объектов переменных.
3: Этот тип объявления, как правило, распространен в разработке плагинов, а также может использоваться в качестве вызова для функций обратного вызова в закрытии.
Таким образом, function fn () {} не равняется var fn = function () {}, они имеют существенные различия.