Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.07.2013, 18:00
Аспирант
Отправить личное сообщение для shkarbatov Посмотреть профиль Найти все сообщения от shkarbatov
 
Регистрация: 25.07.2011
Сообщений: 45

Замыкание в 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 переменных, и еще много чего нет, но эту функциональность можно получить при помощи замыканий.

Приведите пожалуйста еще какие нибудь примеры. Хочется разобраться в замыканиях.

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 28.07.2013, 21:00
Аспирант
Отправить личное сообщение для Logo Посмотреть профиль Найти все сообщения от Logo
 
Регистрация: 15.03.2008
Сообщений: 91

Например, можно назначить обработчик вот так.
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 на этом сайте.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
Подгрузка JS + ajax... afr0 AJAX и COMET 8 10.04.2013 14:38
Замыкание. jquery&native js Blizzart Общие вопросы Javascript 3 15.03.2013 12:23