Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 67
Благодарности: 5

Профиль | Сайт | Отправить PM | Цитировать


все решилось гораздо проще, правда, как-то некрасиво:
Код: Выделить весь код
eval('document.getElementById(\'element_id\').onmouseower = function(e) {'+
  'alert(\''+myvar+'\');'+ // здесь myvar из переменной становится константой для ЭТОЙ функции!!!
  
  ...
  statement
  ...

  'return false;'+
'};');
Цитата 39-я набла Куроводства:
Оказывается, можно обойтись и без создания функции createFunc(), однако это потребует от нас написания двух замыканий на каждом обороте цикла:

Код: Выделить весь код
function create(n) {
  var arr = [];
  for (var i=1; i<n; i++) {
    // Создаем функцию...
    arr[i] = function(x) { 
      // создание замыкания с лексической x
    return function() { alert(x*x) } 
  }(i); // и тут же ее вызываем с параметром i!
  }
  return arr;
}
Это работает по той же самой причине, что и код выше — за счет копирования i во вновь создаваемую при каждом вызове переменную x.

Отправлено: 11:40, 19-09-2006 | #5