funcs = [];
function addSomething(f) {
funcs.push(f);
}
function test() {
for (var i=0; i<3; i++) {
// эта переменная одна на всю функцию, хотя кажется, что ее скоп
// ограничен соотв. блоком, и каждая лямбда захватит именно свою переменную
var id = i;
addSomething(function () { print(id); });
}
}
test();
for (var i=0; i<funcs.length; i++) {
funcs[i]();
}
ZnVuY3MgPSBbXTsKCmZ1bmN0aW9uIGFkZFNvbWV0aGluZyhmKSB7CiAgICBmdW5jcy5wdXNoKGYpOwp9CgpmdW5jdGlvbiB0ZXN0KCkgewogICAgZm9yICh2YXIgaT0wOyBpPDM7IGkrKykgewogICAgICAgIC8vINGN0YLQsCDQv9C10YDQtdC80LXQvdC90LDRjyDQvtC00L3QsCDQvdCwINCy0YHRjiDRhNGD0L3QutGG0LjRjiwg0YXQvtGC0Y8g0LrQsNC20LXRgtGB0Y8sINGH0YLQviDQtdC1INGB0LrQvtC/CiAgICAgICAgLy8g0L7Qs9GA0LDQvdC40YfQtdC9INGB0L7QvtGC0LIuINCx0LvQvtC60L7QvCwg0Lgg0LrQsNC20LTQsNGPINC70Y/QvNCx0LTQsCDQt9Cw0YXQstCw0YLQuNGCINC40LzQtdC90L3QviDRgdCy0L7RjiDQv9C10YDQtdC80LXQvdC90YPRjgogICAgICAgIHZhciBpZCA9IGk7CiAgICAgICAgYWRkU29tZXRoaW5nKGZ1bmN0aW9uICgpIHsgcHJpbnQoaWQpOyB9KTsKICAgIH0KfQoKdGVzdCgpOwoKZm9yICh2YXIgaT0wOyBpPGZ1bmNzLmxlbmd0aDsgaSsrKSB7CiAgICBmdW5jc1tpXSgpOwp9