Скажем, мы строим список замыканий, которые выполняют некоторую функцию со значением i
, где i
- это новое значение на каждой итерации. Например:
function foo() {
var result = [];
for (var i = 0; i < 4; i++) {
arrayAppend(result, function() { return i; });
}
return result;
}
flist = foo();
newline = "<br>";
for (f in flist) {
WriteOutput(f() & newline);
}
Похоже, что CF захватывает i
по ссылке - результат выше:
4
4
4
4
Эти результаты одинаковы для CF2011, CF2016, Lucee4.5 и Lucee5 (я протестировал через trycf.com, удобно, предполагая, что они действительно работают с этими двигателями).
Я реализовал обходной способ, который я называю value_capturing_closure
, но нене хочу навязывать это моей команде, так как было бы лучше придерживаться идиом CF, с которыми все знакомы. Возможно ли в CF, используя собственный синтаксис замыкания CF, захватывать переменные по значению?