Скажем, например, вы пишете программу, которая ждет сообщения в очереди, обрабатывает ее, а затем ждет следующего сообщения, и это продолжается вечно. На языке, таком как C или Java, он выглядит примерно так:
void processMessage() {
while (true) {
// waitForMessage blocks until the next message is received
msg = waitForMessage();
// handle msg here
}
}
В Javascript (я использую node.js, btw), поскольку используются обратные вызовы, он обычно выглядит так:
function processMessage() {
waitForMessage(function(msg) {
// handle msg or error here
processMessage();
});
}
Мое беспокойство состоит в том, что у вас в основном есть цепочка обратных вызовов, которые рекурсивно называют исходную функцию, и накладные расходы на это могут медленно съесть память. Я предполагаю, что это на самом деле не проблема, поскольку, возможно, обратные вызовы javascript существуют в своем собственном стеке независимо и не попадают в стек исходных функций? Кто-то объясняет обратные вызовы javascript и просматривает мне и заверяет меня, что код javascript не будет исчерпан, когда он запускается в течение сколь угодно большого количества времени при получении произвольно большого количества сообщений.