Замыкание в js
Всем добрый день.
Подскажите пожалуйста, читал доку js по замыканию. Но немного не понял основного его назначения. function outer() { var outerVar = 13; var func = function(innerVar) { return innerVar + outerVar; } return func } var func = outer(); console.log(func(2)); //15 Как я понимаю, оно позволяет управлять областью видимости переменных. Например, в javascript нет private и protected переменных, и еще много чего нет, но эту функциональность можно получить при помощи замыканий. Приведите пожалуйста еще какие нибудь примеры. Хочется разобраться в замыканиях. Спасибо! |
Например, можно назначить обработчик вот так.
function test() { var text = "hello!" document.onclick = function() { alert(text); } } test() При клике выведется "hello!", т.к. функция-обработчик имеет замыкание на переменную text. Любые другие колбеки, такие как setTimeout или ajax запросы также будут иметь доступ к переменным функции, это основной способ передать в колбек. function deferedAlert(text) { // функция, выводящая сообщение через 3 секунды setTimeout(function (){ alert(text) }, 3000) } deferedAlert("hello") Действительно, можно реализовать private свойства в функции-конструкторе объекта (protected обычно реализуется соглашением, что с _ начинаются protected методы) function SomeClass() { var self = this; var private = "private"; self.alert = function() { alert(private) } } Подробнее в статьях про ООП в JS на этом сайте. |
Часовой пояс GMT +3, время: 11:40. |