Ресурсы: Очень подробно про замыкания Стрелочные функции Таблица с классификацией Замыкания изнутри
Синтаксис функции:
Код
function showFirstMessage() {
console.log('Hello, World!');
}
showFirstMessage(); // Hello, World!
Варианты с передачей аргумента:
Код
let a = 'Всем привет!';
function showFirstMessage(text) {
console.log(text);
}
showFirstMessage(a); // Всем привет!
showFirstMessage('Привет, мир!'); // Привет, мир!
Негласно принято, что имя функции должно быть глаголом с припиской того, что эта функция выполняет, например:
showFirstMessage (показать первое сообщение).
Для написания имени функции используется формат
camelCase Анонимные функции - используются прямо здесь и сейчас и только однократно, при этом имя для функции не указывается, поэтому к ней нельзя обратиться.
Как ведут себя переменные внутри функций?
Если переменная объявлена внутри функции, снаружи она будет недоступна, так как переменные, объявленные с помощью
let и
const существуют только внутри блока функций.
Такие переменные называются
локальными Код
function showMyResult() {
let a = 50; // это локальная переменная
}
console.log(a); // a is not defined
В примере ниже переменная создана глобально, а внутри функции мы пытаемся её изменить
Код
let a = 50;
function showMyResult() {
a = 30; // присваиваем переменной новое значение
}
showMyResult();
console.log(a); // 30
Ещё пример: одноимённо названные переменные, находящиеся в разных местах, то есть, одна из них объявлена глобально, другая локально.
Код
let a = 50; // глобальная
function showMyResult() {
let a = 30; // локальная, снаружи не видна
}
showMyResult();
console.log(a); // 50
Функция изначально ищет переменные внутри себя, а когда она их не находит, идет уровнем выше
Код
let a = 50; // глобальная
function showMyResult() {
console.log(a); // 50
}
showMyResult();
console.log(a); // 50
В примере выше функция не нашла внутри себя переменную
a, поэтому поиск пошел выше и функция обратилась к переменной
a глобальной.
Замыкание - это сама функция вместе со всеми внешними переменными, которые ей доступны.
Функция может вернуть какое-то значение, для этого используется ключевое слово
return, как только код доходит до
return, функция завершает работу и весь код ниже уже не будет выполнен.
Код
function calc(a, b) {
return a + b;
}
calc(4, 3); // 7
calc(2, 4); // 6
return позволяет вернуть значение, полученное в результате работы функции, "во внешний мир"
Код
function calc(a, b) {
return a + b;
}
let result = calc(3, 5);
console.log(result); // 8
Классификация функций
Function declaration Синтаксис таких функций:
Код
function funcName() {
}
Важной особенностью таких функций является то, что они
существуют ещё до того, как код будет запущен. Так как браузер, пробегаясь по странице, первым делом ищет все переменные
var и все функции
function declaration, это даёт возможность вызова функции до её объявления
Код
calc(3, 4);
function calc(a, b) {
console.log(a * b); // 12
}
Function Expression Синтаксис этих функций
Код
let foo = function() {
}
Функция при этом помещается в переменную, поэтому
вызвать такую функцию можно только после её объявления.
Код
const logger = function () {
console.log('Hello!');
}; // обязательно точку с запятой в конце
logger(); // Hello!
Стрелочные функции (ES6) Код
const calc = (a, b) => a + b;
Это сокращённая запись, более полно выглядит так
Код
const calc = (a, b) => { return a + b };
Cтрелочные функции не имеют так называемого
контекста вызова, поэтому чаще всего их используют в обработчиках событий.
Если при записи функции все умещается в одну строчку, то фигурные скобки для тела функции можно опускать.
Код
const calc = (a, b) => a + b;
Если же функция имеет лишь один аргумент, то допустима такая запись (без круглых скобок)
Код
const calc = a => a + 10;
Добавлять комментарии могут только зарегистрированные пользователи.