Console.log (жизнь)

Переменная не определена…

Представьте, если бы было так легко понять смысл жизни. В JavaScript, когда вы получаете эту ошибку, это может вызывать уныние. Что здесь случилось? Что это вообще значит и как это исправить. Во-первых, нам нужно понять, что происходит под капотом движка JavaScript V8.

Контекст выполнения

Когда JavaScript начинает работать, он настраивает среду, в которой будет выполняться ваш код, которая называется «контекст выполнения». Первое, что он делает, - это создает глобальный объект, переменную с именем «this» и, возможно, ссылку на внешнюю среду, если таковая имеется. На этом этапе он начинается как процесс «подъема» всех переменных в вашем коде.

Подъем - еще одна тема, которую лучше обсудить позже в отдельной статье. А пока для разговора давайте просто согласимся использовать определение из документов MDN здесь:

«строгое определение подъема предполагает, что объявления переменных и функций физически перемещаются в начало вашего кода, но на самом деле это не то, что происходит. Вместо этого объявления переменных и функций помещаются в память на этапе компиляции, но остаются там, где вы ввели их в код ».

Поскольку JavaScript настраивает среду для запуска вашего кода, он начинает выделять память для каждой объявленной вами переменной и пространство для значения, которое вы ей присвоили. Если вы не объявили явное значение для переменной с именем life. JavaScript автоматически присвоит ему особое значение «undefined». Итак, когда вы видите, что жизнь «undefined» является ошибкой. Что javaScript пытается вам сказать: находится в среде выполнения, которую я создал для запуска вашего кода. Вы не присвоили значение переменной life. Итак, ваш код имеет переменную с именем life, но не хранит для нее значение в памяти.

Это сильно отличается от «Справочная ошибка: жизнь не определена». JavaScript в его необычайно полезном виде. Пытается указать вам направление, в котором нужно исправить ваш код. То, что движок JavaScript пытается сообщить вам с помощью «Ошибка ссылки: жизнь не определена», - это то, что когда ваш код был поднят, а переменные и значения были помещены в память. Механизм JavaScript не выделил место в памяти для этой переменной, поскольку вы не объявили переменную с именем life. По сути, он говорит, что в вашем коде нет ссылки на переменную с именем life , при этом ничего не поднималось. Итак, у нас есть ошибка, потому что в среде выполнения нет ничего, чтобы ссылаться на значение

Это поднимает действительно важный вопрос: что, если вам нужно объявить переменную и установить для нее значение, указывающее на отсутствие значения?

Я предлагаю использовать null в соответствии с MDN здесь.

Значение null представляет собой намеренное отсутствие какого-либо значения объекта. Это одно из «примитивных значений JavaScript и считается ложным для логических операций ».

Надеюсь, эта статья помогла прояснить, что на самом деле происходит внутри JavaScript, поскольку вы столкнетесь с этими типичными ошибками. Увы, так нелегко определить смысл жизни.

Удачного кодирования!