Получается, что нет:
alert( (function(a, b) { return new Function('return a + b;'); })(5, 6)() ); происходит ошибка, если бы функция создаваемая через "new Function" запоминала "a" и "b", то вывелось бы 11, как здесь: alert( (function(a, b) { return function() {return a + b}; })(5, 6)() ); |
Цитата:
В статье про замыкания есть такой код: function addEvents2(divs) { for(var i=0; i<divs.length; i++) { divs[i].innerHTML = i divs[i].onclick = function(x) { return function() { alert(x) } }(i) } } Т.е. как я понял,временная функция, после исполнения, возвращает уже функцию-обработчик, которая не использует внешних [[scope]] и, соответственно, нет никакого замыкания... Хоть бы это было так:) |
Цитата:
alert( (function() { return new Function('a','b','return a + b;'); })()(5, 6) ); |
Как же нет, "x" то он (обработчик) запомнил, кроме того внутри видны "i" и "divs".
|
ZoNT,
и что, где функция созданная через "new Function" запомнила что-то замыканием? |
Функция через new Function ничего не запоминает, так как формат её создания не подразумевает передачи в неё каких-либо ссылок...
|
Цитата:
:help: |
Цитата:
|
Цитата:
alert( (function(a, b) { return new Function('return ' + a + ' + ' + b + ';'); })(5, 6)() ); |
Это всё понятно... как передать внешнюю переменную в создаваемую ф-цию, не оставляя ссылки на scope?! Может можно как-то через prototype решить... Ну или в заранее созданную...
|
Часовой пояс GMT +3, время: 10:05. |