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