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

Привет ✌
Кто может объяснить, почему в данном коде в консоль будет выведено 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);
})();
  • Вопрос задан
  • 756 просмотров
Решения вопроса 1
vmakhnyuk
@vmakhnyuk
Frontend developer
Функция y на этапе декларации(в аргументе) берет значение переменной z из аргументов.
Cначала функция посмотрит на свою лекс. область видимости, убедиться, что в ней нет переменной z, потом пойдет на 1 уровень выше(уровень аргументов), увидит там переменную z и возьмет ее значение. Если убрать аргумент z и списка аргументов, то аналогично будет произведен поиск переменной z выше той лекс. области видимости где функция объявляется - переменная z со значением 0. Поиск переменной происходит не на этапе вызова функции а на этапе ее декларации.
MDN
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@66demon666
По навыкам джун - по факту безработный
На самом деле это просто цепочка из функций, внутри одной вызывается другая, и т.п, просто синтаксис стрелочный. Подсказывать ответ не буду, но направление дал
Ответ написан
Ваш ответ на вопрос

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

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