Мне нравится JavaScript до сих пор и решил использовать Node.js как мой движок частично из-за этого, который утверждает, что Node.js предлагает TCO, Однако, когда я пытаюсь запустить этот (явно хвостовой) код с Node.js, он вызывает переполнение стека:
function foo(x) {
if (x == 1) {
return 1;
}
else {
return foo(x-1);
}
}
foo(100000);
Теперь я сделал рытье, и я нашел this. Здесь, кажется, я должен написать это следующим образом:
function* foo(x) {
if (x == 1) {
return 1;
}
else {
yield foo(x-1);
}
}
foo(100000);
Однако это дает мне синтаксические ошибки. Я пробовал различные перестановки, но во всех случаях Node.js кажется чем-то недовольным.
По существу, я хотел бы знать следующее:
- Есть ли или не Node.js сделать TCO?
- Как эта магическая вещь
yield
работает в Node.js?