2015-08-10 2 views
3

Я хочу знать, как Javascript обрабатывает обратные вызовы внутри рекурсивного вызова, являются ли обратные вызовы попадают прямо в очередь на каждом из рекурсивных вызовов или после того, как вызов разрешается с помощью базового кода?Как обратные вызовы работают в рекурсивном вызове с помощью Javascript?

Тестовый пример кода

function enums(start,end,callback) { 
    callback(start); 
    if (end == 1) 
    return 1; 
    else{ 
    return enums(start + 1, end - 1, callback); 
    } 
} 

var callback = function (number){ 
    console.log(number); 
} 
enums(1,10,callback); 
+0

Вы можете как тест и проверить это, просто запустив код в консоли. Пока вы не используете асинхронный код, код выполняется по порядку. – Nit

ответ

1

рекурсивные вызовы обрабатываются таким же образом, как и любой другой язык программирования. Код будет выполнен так же, как если бы вы выполняли итерацию по массиву и вызывали функцию внутри цикла. Если вы включили таймер с помощью setTimeout с задержкой в ​​0 миллисекунд после вызова функции enums, вы заметите, что обратный вызов setTimeout будет выполнен после возврата рекурсии.

function enums(start,end,callback) { 
    callback(start); 
    if (end == 1) 
     return 1; 
    else{ 
     return enums(start + 1, end - 1, callback); 
    } 
} 

var callback = function (number){ 
    console.log(number); 
} 
enums(1,10,callback); 
setTimeout(function(){ console.log("Rick"); }, 0); 

вывод должен быть: 1..10, а затем Рик

+0

[Ваш пример не работает] (https://imgur.com/eTyZMLO) –

+0

Я запустил его сейчас, и он работает – Sagi

Смежные вопросы