В апреле я опубликую небольшую серию блогов под названием «Вопросы из прошлого». Я просматриваю свои старые блокноты с первого года работы разработчиком и отвечаю на вопросы, которые считаю наиболее важными. Сегодня мы рассмотрим замыкания и обратные вызовы в Javascript.
Замыкания
Замыкания — это функции, которые имеют доступ к переменным из внешней функции даже после завершения выполнения внешней функции. Это может показаться немного запутанным, но давайте рассмотрим это вместе.
Представьте, что у вас есть функция, которая определяет переменную, например:
function outerFunction() { let outerVariable = "Hiiii!"; function innerFunction() { console.log(outerVariable); } return innerFunction; } const inner = outerFunction(); inner(); // logs "Hiiii!" to the console
В этом примере innerFunction
имеет доступ к outerVariable
, даже если он не определен внутри самого innerFunction
. Это связано с тем, что innerFunction
закрывает outerVariable
, создавая замыкание, которое позволяет получить доступ к значению переменной даже после завершения выполнения outerFunction
.
Обратные вызовы
Обратный вызов — это функция, которая передается в качестве аргумента другой функции и выполняется позже. Вот пример:
function doSomething(num1, num2, callback) { let result = num1 + num2; callback(result); } function logResult(result) { console.log(`The result is ${result}`); } doSomething(3, 4, logResult); // logs "The result is 7" to the console
В этом примере logResult
— это функция обратного вызова, которая передается в качестве аргумента функции doSomething
. Когда выполняется doSomething
, он выполняет операцию над num1
и num2
, а затем вызывает функцию обратного вызова, передавая результат в качестве аргумента. В этом случае выполняется logResult
, и результат записывается в консоль.
Вот и все! Как только вы разберетесь с замыканиями и обратными вызовами, вы сможете писать более качественный и эффективный код.