Закрытие — простая вещь, но кажется очень сложной для понимания. Мы все использовали их, даже не зная о них. Замыкания очень тесно связаны с лексической областью действия.
Я рекомендую вам просмотреть мои более ранние истории о Контексте выполнения и Областях и цепочке областей действия, прежде чем читать это.
Всякий раз, когда вы создаете функцию внутри другой функции, вы создаете замыкание. И эта внутренняя функция — замыкание.
Закрытие полезно, когда мы определяем функцию внутри одной области видимости и используем ее в какой-то другой области видимости, а там она недоступна. С помощью закрытия мы делаем это возможным.
Замыкания содержат свою собственную цепочку областей видимости, цепочку областей видимости своих родителей и глобальную область видимости. Он также может получить доступ к переменным своей внешней функции даже после возврата функции.
function parent () { const name = 'Aastha' \\ Closure function child() { console.log(name) } return child } parent()() // Aastha A way of calling a closure
Другой способ, присвоив возвращаемую функцию переменной и вызвав ее позже.
function parent() { name = 'Aastha'; return function () { console.log(name); } } parent(); // this will be invoked // the returned function gets saved in closurecall variable. closurecall = parent(); // calling closurecall will give the returned function from the parent() function closurecall(); // 'Aastha'
Замыкание также может получить доступ к переменным внешней функции даже после возврата функции. Это позволяет возвращаемой функции поддерживать доступ к внешней функции.
Когда вы возвращаете внутреннюю функцию из функции, эта возвращаемая функция не будет вызываться при попытке вызвать внешнюю функцию. мы сначала сохраняем вызов внешней функции в отдельной переменной, а затем вызываем переменную как функцию.
Другой пример с передачей аргумента для функции возврата
function parent() { name = 'Aastha'; return function (value) { console.log(name + value); } } parent(); // this will be invoked // the returned function gets saved in closurecall variable. closurecall = parent(); // calling closurecall will give the returned function from the parent() function closurecall('Gupta); // Aastha Gupta