Получается, что нет:
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, время: 18:53. |