Скажем, например, вы пишете программу, которая ждет сообщения в очереди, обрабатывает ее, а затем ждет следующего сообщения, и это продолжается вечно. На языке, таком как 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 не будет исчерпан, когда он запускается в течение сколь угодно большого количества времени при получении произвольно большого количества сообщений.
