JavaScript - Как я могу узнать об использовании "замыканий"? - PullRequest
3 голосов
/ 17 октября 2008

Из Википедии, свободной энциклопедии: Закрытие (информатика)

В информатике закрытие - это функция, которая оценивается в среда, содержащая один или несколько связанные переменные. При вызове Функция может получить доступ к этим переменным. Явное использование замыканий связано с функциональным программированием и с такими языками, как ML и Лисп. Конструкции, такие как объекты в другие языки также могут быть смоделированы с крышками.

Чтобы использовать это внутри JavaScript, кто-то может привести мне пример того, как это применимо?

Ответы [ 3 ]

11 голосов
/ 17 октября 2008

Поиск «закрытий javascript» дал множество обнадеживающих ссылок. Лучшие три были этими двумя (третья ссылка была переформатированной версией второго):

Если это не помогло вам, пожалуйста, объясните, почему мы находимся в лучшем положении, чтобы реально помочь. Если вы не искали, прежде чем задать вопрос, пожалуйста, сделайте это в следующий раз:)

4 голосов
/ 17 октября 2008

(используя пример из jQuery)

function SetClassOnHover(className){
  $("td").hover(
    function () {
      $(this).addClass(className);
    },
    function () {
      $(this).removeClass(className);
    }
  );
}

Замыкание вступает в игру, когда переменная className используется внутри области действия каждой функции. Когда SetClassOnHover завершается, обе функции должны сохранять дескриптор className для доступа к его значению при вызове функций. Вот что позволяет закрытие.

1 голос
/ 23 февраля 2011

Практический пример замыканий - это когда они используются для создания «частных» переменных, таких как

function incrementer(){
    var i=0;
    this.increment=function(){
        i++;
    }
    this.get=function(){
        return i;
    }
}

Единственный способ получить доступ к i - это использовать метод get, а единственный способ изменить его - использовать приращение метода. В классах вы можете сделать это для эмуляции приватных переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...