«Замыкание» — важное понятие в JS. Это не навык высокого уровня, а побочный эффект JS.
Беглый взгляд
Давайте быстро взглянем на Closure.
!function(){
var counter= 5
window.add= function(){
counter += 1
}
window.minus = function(){
counter -= 1
}
}()
Внутри IIFE ( (Immediately Invoked Function Expression) есть локальная переменная counter
и 2 функции. Вне IIFE мы можем использовать эти 2 функции для управления и доступа к значению counter
.
window.add() window.minus()
Это замыкание, которое использует функцию для доступа к локальным переменным.
Зачем нам это нужно
В ES5 мы определяем локальную переменную внутри области блока с помощью IIFE. Тогда это не повлияет на другие части нашего кода. Но есть проблема: что, если некоторым блокам нужна эта локальная переменная?
Чтобы решить эту проблему, разработчики JS придумали идею: предоставить API (способ) для доступа к нему и управления им (так же, как метод получения или установки в Java). Затем у нас есть новое «слово» — Closure: функция (API, доступная этой области) манипулирует локальной переменной этой области.
Вот еще один пример:
function fn(){
var name = "Jack"
return function(newName){
name = newName
}
}
var setName = fn() // setName is the API
setName("Bob")
Если вы не предоставляете некоторые функции (API), вы не можете использовать локальные переменные.
Резюме
- Закрытие в основном предназначено для сокрытия переменной и косвенного доступа к ней.
- Это просто концепция. Вы можете использовать его каждый раз, не зная этого имени, поэтому вам не нужно его знать.