Определенное влияние оказывает способ прохождения контроля через функции. Давайте посмотрим поближе. Вот простая программа, которая выполняет несколько вызовов функций: function greet(who) { console.log("Hello " + who); } greet("Harry"); console.log("Bye"); Выполнение этой программы происходит примерно так: вызов приветствия приводит к тому, что управление переходит к запуску этой функции (строка 2). Функция вызывает console.log , которая берет управление в свои руки, делает свою работу, а затем возвращает управление на строку 2. Там он доходит до конца функции greet, так что возвращается в место, которое вызвало его, то есть до четвертой строки. Линия после этого снова вызывает console.log. После этого программа доходит до конца. Можно схематично показать поток управления следующим образом: не в function в greet в console.log в greet не в function в console.log не в function Поскольку при возвращении функция должна возвращаться в то место, откуда она была вызван