Замыкание в JavaScript — одна из самых сложных концепций для разработчиков JavaSript. Программировать на JavaScript, не зная о замыкании, — все равно, что водить машину, не зная ее особенностей.

Если вы готовитесь к собеседованию на должность среднего звена в какой-либо компании, то это один из любимых вопросов для javascript-разработчиков. Такие компании, как Amazon, Google, Apple, также задавали очень много проблем, связанных с замыканиями JavaScript. Так что это самые важные темы в JavaScript.

Если у вас есть страх замыкания в JS, то после прочтения этой статьи вы станете мастером замыкания Js. 🙂

Что такое замыкание в JavaScript

Чтобы понять, что такое замыкание, вы должны сначала узнать о области действия локальной переменной и области действия функции.

Замыкание — это функция, которая имеет доступ к своей родительской области даже после закрытия родительской области.

Выше строка говорит, что такое закрытие в javascript, но что означают эти строки? Давайте разберем значение этой строки в деталях на паре примеров.

Все мы знаем, что всякий раз, когда мы создаем функцию в javascript, она имеет доступ к локальным и глобальным переменным. Переменные, созданные внутри функции, называются локальными переменными, а переменные, созданные вне функции, называются глобальными переменными.

function example(){ 
   let x = 3;
   console.log(x); 
} 
example(); // 3 console.log(x); // Uncaught ReferenceError: x is not defined

В приведенном выше коде мы создали функцию с именем и внутри этой функции создали переменную с именем x и присвоили ей значение.

Когда вы вызываете функцию, она регистрирует значение, но когда вы вызываете переменную внутри этой функции, мы получаем ошибку ссылки. Это связано с тем, что x имеет локальную область действия с примером функции и недоступен за пределами этой функции.

Теперь возьмите другой код, в котором мы определяем x как глобальную переменную, как показано ниже.

let x = 3; 
function example(){ 
   console.log(x); 
} 
example(); // 3 console.log(x); // 3

В приведенном выше коде мы определяем x как глобальную переменную, и когда мы вызываем функцию example() и регистрируем x, мы получаем оба значения.

Эти два кода просты и не требуют пояснений, но подумайте, что произойдет, если мы добавим другую функцию в функцию example(), которая выполняет другую задачу. У вас нет идей? Давайте узнаем это, и тогда мы получим четкую концепцию замыкания в javascript.

В приведенных выше двух примерах мы получим один и тот же вывод 4. Похоже, вы запутались, как это возможно, тогда посмотрите определение закрытия javascript, которое вы прочитали несколько минут назад в приведенных выше строках.

Это все из-за эффекта закрытия javascript.

Давайте лучше разберемся с закрытием javascript на другом примере.

function Counter() { 
    let counter = 0; 
    return function IncreaseCounter() { 
        return counter += 1; 
     }; 
} 
let count = Counter(); console.log(count()); // 1 console.log(count()); // 2 console.log(count()); // 3 console.log(count()); // 4

Код выше очень похож на предыдущий. Здесь мы создаем функцию счетчика, которая увеличивает значение каждый раз, когда эта функция вызывается.

Это одна из наиболее часто используемых функций замыкания в JS. Предположим, вам нужно реализовать функцию счетчика в своем коде, и если вы сделаете это с помощью простой функции, она будет сбрасывать этот счетчик каждый раз, когда вы вызываете эту функцию, и если вы определяете глобальную переменную, то другая функция может изменить это значение.

Почему мы используем замыкание в JavaScript

Хороший разработчик всегда хочет, чтобы его код соответствовал стандарту кодирования и был прост в использовании, упрощая повседневную работу. Для разработчиков javascript замыкание — один из тех навыков, которые заставляют их работать на продвинутом уровне кодирования, а затем могут повысить их производительность.

Ниже приведены некоторые случаи, когда закрытие экономит много времени разработчику JavaScript.

Инкапсуляция данных

Инкапсуляция данных — одна из наиболее часто используемых и важных функций в программировании. При написании кода мы не хотим раскрывать все детали внешнему миру. В javascript, используя закрытие, мы можем добиться этого очень легко.

let person = (function () { 
    let fullName = "sachin jaiswal"; 
    return { 
        setFullName : function (newValue) { 
            fullName = newValue; 
         }, 
    
        getFullName : function () {
            return fullName;
        } 
     }; // end of the return 
}());

В приведенном выше коде мы инкапсулируем переменную fullName с помощью замыкания. В этом коде мы возвращаем две функции setFullName и getFullName, которые используются для установки нового имени и получения имя человека соответственно.

Если вы попытаетесь использовать person.fullName, это приведет к неопределенной ошибке.

Анимация элемента DOM

Допустим, у вас есть элемент DOM, значение которого увеличивается с заданным интервалом времени. Затем вы можете легко сделать это, используя закрытие javascript.

let count = 0; 
let p = createP(count); // Call countIt every 1 seconds setInterval(incrementCount, 1000); // Increase the count and set the new content function incrementCount() { count++; p.html(count); }

В чем преимущество использования замыкания в JavaScript

Есть много преимуществ использования закрытия в javascript. Всякий раз, когда вы создаете новую функцию в javascript, она автоматически создает закрытие.

Замыкание позволяет легко следовать объектно-ориентированному стилю программирования в JavaScript. Вы можете легко создать класс, инкапсулировать данные и легко делать другие вещи.

Вывод

Надежда, теперь у вас есть четкое представление о закрытии. Это несложно понять, но вам нужно изучить различные функции замыкания и область действия функции, чтобы стать мастером замыкания javascript.

В следующий раз, когда вы увидите закрытие в любом коде GitHub или в любом другом месте, вы сможете легко понять, что они делают.

Если вы хотите узнать об этом больше, я рекомендую вам прочитать Официальные документы MDN или вы можете пройти любые курсы на лучших онлайн-сайтах для обучения веб-разработке, таких как Codecademy, Udemy. , Coursera, SimpliLearn.

Если у вас есть какие-либо сомнения и предложения, дайте мне знать в разделе комментариев. И если вам понравилась эта статья, пожалуйста, поделитесь ею.

Первоначально опубликовано на https://codesquery.com 3 августа 2019 г.