Я хотел посчитать шаги бесконечной рекурсивной функции в node.js (v0.4.10), используя глобальное увеличение значения. однако счет всегда претендует на ноль
> c = 0
> (function f() { c++; console.log(c); f() })();
1
2
...
18648
RangeError: Maximum call stack size exceeded
> c
0
запись значения c
в консоль из функции показывает, что значение действительно увеличивается, но каким-то образом оно, наконец, сбрасывается после этой аварии стека. даже если вместо c
.
используется
global.c
это правильное поведение? что здесь происходит? например в хроме (v14) c
содержит окончательный результат, как и ожидалось.
UPDATE
оказывается, что вышесказанное действительно только в интерактивном режиме. когда код выполняется из файла, а функция заключена в блок try-catch (для предотвращения преждевременного выхода), значение c является правильным ..
c = 0;
try {
(function f() { c++; f() })();
} catch(e) {};
console.log(c);
однако, между интерактивным node.js и консолью javascript chromium все еще существует разница, где значение сохраняется в необработанном исключении