Вчера мы рассмотрели внутренности того, как область действия работает в Javascript, но сегодня мы более подробно рассмотрим придуманное явление «подъем» и его влияние на то, как код интерпретируется во время выполнения.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: вчера я забыл упомянуть термин лексическое окружение и его значение. В моих терминах это означает область с доступом ко всему, что находится внутри нее, а также доступ к дополнительным родительским средам, которые ее охватывают.
Во-первых, давайте рассмотрим небольшую игрушечную задачку, которая заставит наш мозг работать в правильном направлении. Попробуйте угадать, что этот фрагмент выведет для переменных a и b.
a; // ??? b; // ??? var a = b; var b = 2; a; // ??? b; // ???
Вы могли догадаться:
Вау, вы прекрасно знаете, что это приведет к ошибке! Зачем делать такую гадость?!
Что ж, можно согласиться, что это некрасиво, но оказывается, что переменная a на самом деле выводит «undefined», а переменная b выводит «2». Почему?
Концепция "поднятия" связана с тем, как интерпретатор ведет себя во время выполнения. Для лучшего понимания разработчики описывают это как размещение всех объявленных функциональных выражений или переменных в верхней части среды, оставляя идентификаторы, такие как a = b, на их месте.
Вместо этого интерпретатор делает следующее:
var a; var b; a; // undefined b; // undefined a = b; b = 2; a; // undefined b; // 2
Объявления переменных перемещаются наверх, а все остальное находится в точном порядке внизу, поэтому никакая логика не запутается. Поскольку обеим переменным еще ничего не присвоено, они обе имеют значение «undefined».
Затем переменной a назначается переменная b, которая по-прежнему имеет значение «undefined», а затем b присваивается номер 2 в следующая строка.
Как видите, Hoisting работает и для функций. Попробуйте подумать о том, как будут выполняться эти строки кода, и я покажу вам ответ в следующем блоге! А пока удачного кодирования!
var a = function a() { console.log("a") }; var c = "c"; function b() { console.log("b") };
К вашим услугам. ❤ Сесилия Сиснерос