Замыкание в 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, время: 05:34. |