Объяснение участка кода?

Привет ✌
Кто может объяснить, почему в данном коде в консоль будет выведено 1, затем 2 ? Я думал, что в первом случае вызов y() из нее x(z) возьмёт z изнутри ( var z = 2 ),а берет с аргументов ( z = 1 ). Какая тут последовательность? Почему такой вывод?
let z=0;

(function test(x=(c)=>console.log("b="+c), y=()=>x(z), z=1) {
  var z=2;
  y();
  console.log("a="+z);
})();
  • Вопрос задан
  • 743 просмотра
Решения вопроса 1
Born2Lose
@Born2Lose
Frontend developer
Функция y на этапе декларации(в аргументе) берет значение переменной z из аргументов.
Cначала функция посмотрит на свою лекс. область видимости, убедиться, что в ней нет переменной z, потом пойдет на 1 уровень выше(уровень аргументов), увидит там переменную z и возьмет ее значение. Если убрать аргумент z и списка аргументов, то аналогично будет произведен поиск переменной z выше той лекс. области видимости где функция объявляется - переменная z со значением 0. Поиск переменной происходит не на этапе вызова функции а на этапе ее декларации.
MDN
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@66demon666
По навыкам джун - по факту безработный
На самом деле это просто цепочка из функций, внутри одной вызывается другая, и т.п, просто синтаксис стрелочный. Подсказывать ответ не буду, но направление дал
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Минск
от 2 800 до 3 300 $