| 
 вопр. замыкание Что-то не могу понять, зачем здесь замыкание?: Из книги jQuery Подробное руководство по продвинутому JavaScript "Пример выводит имя тега и значение атрибута id текущего элемента, создавая замыкание, после этого выводится значение атрибута id элемента, для которого предназначено событие." 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html id="greatgreatgrandpa">
  <head>
    <title>DOM Level 0 Bubbling Example</title>
    <script type="text/javascript" src="../scripts/jquery-1.2.1.js">
    </script>
    <script type="text/javascript">
      $(function(){
        $('*').each(function(){
          var current = this;
          this.onclick = function(event) {
            if (!event) event = window.event;
            var target = (event.target) ?
                         event.target : event.srcElement;
            say('For ' + current.tagName + '#'+ current.id +
                ' target is ' + target.id);
          }
        });
      });
      function say(text) {
        $('#console').append('<div>'+text+'</div>');
      }
    </script>
  </head>
  <body id="greatgrandpa">
    <div id="grandpa">
      <div id="pops">
        <img id="vstar" src="vstar.jpg"/>
      </div>
    </div>
    <div id="console"></div>
  </body>
</html>
Можно же так, и вроде нет в этом криминала: 
<script type="text/javascript">
      $(function(){
        $('*').each(function(){
          //var current = this;
          this.onclick = function(event) {
            if (!event) event = window.event;
            var target = (event.target) ?
                         event.target : event.srcElement;
            say('For ' + this.tagName + '#'+ this.id +//замыкание не требуется
                ' target is ' + target.id);
          }
        });
      });
      function say(text) {
        $('#console').append('<div>'+text+'</div>');
      }
    </script>
 | 
| 
 Это вы кэширование this в локальной переменной замыканием назвали? | 
| 
 1-ый пример: var current = this; 2-ой пример(твой): this.tagName т.е. указывают на один и тот же объект. Этот пример из книги просто чтобы продемонстрировать что такое замыкание. | 
| 
 А, ну у вас просто совпало, что в обоих контекстах this указывает на один и тот же объект. А так бы ваш вариант не работал. | 
| 
 Цитата: 
 Хотя, если по чесноку, то тут после вызова внешней функции , сохраняется её объект вызова, во внутреннюю ф-цию "передается ссылка на объект с локальными переменными [[scope]] внешней функции", т.е. внутренняя ф-ция теперь может в любой момент через этот объект получить локальные переменные внешней ф-ции, т.е. current. Цитата: 
 Цитата: 
 | 
| 
 И да, this замыкания плохо иллюстрирует. Хорошо их иллюстрирует навешивание обработчиков или вызов асинхронных функций в цикле  
for (var i = 0; i < 3; i++) {
    setTimeout(function() {
        alert(i);
    }, (i + 1) * 1000);
}
for (var i = 0; i < 3; i++) {
    (function(index) {
        setTimeout(function() {
            alert(index);
        }, (index + 1) * 1000);
    })(i);
}
 | 
| 
 [quote=Kolyaj;46847]И да, this замыкания плохо иллюстрирует. Хорошо их иллюстрирует навешивание обработчиков или вызов асинхронных функций в цикле  
for (var i = 0; i < 3; i++) {
    setTimeout(function() {
        alert(i);
    }, (i + 1) * 1000);
}
Да, у этих 3-х ф-ций общий объект вызова, поэтому они и на одно i ссылаются, равное 3 к концу цикла. | 
| Часовой пояс GMT +3, время: 21:28. |