@Melagomania

Как функция получает доступ к себе при рекурсивном вызове?

Правильным ли будет утверждение, что при рекурсивном вызове функции в коде, движок js ищет объявление вызываемой функции во внешней области видимости? Ниже код с комментариями.

function func() {  //функция func объявлена в глобальном контексте
    func(); 
/*в текущей области видимости 'func' не объявлена, поэтому движок 
ищет объявление во внешней области видимости (в данном случае это
 глобальная область видимости), находит его там и теперь может выполнить функцию*/
}


Получение доступа к переменным и функциям происходит примерно так, как я описал выше (сразу ищем внутри текущей области видимости, потом по очереди идем искать во внешних). Подходит ли эта логика для рекурсивных вызовов, или они работают по своим "законам"?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Все верно https://jsfiddle.net/yy38x0mg/
Эта логика справедлива для любых вызовов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
В js, если что-то не объявлено, всегда происходит поиск во внешней области видимости.
Подробнее можно почитать здесь: https://learn.javascript.ru/closures
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
в текущей области видимости 'func' не объявлена

как раз таки объявлена. В любой именованной функции ее имя создается в момент вызова (наравне с arguments и this) и ссылается на саму функцию. Наиболее наглядно это показывают именованные функциональные выражения:
var f = function func() {
  console.log(func.name); // 'func'
};
console.log(f.name); // 'func'
console.log(func.name); // Reference error так как func нет в этой области видимости
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы