<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@myrelax</title><generator>teletype.in</generator><description><![CDATA[Написано мной и для себя. Основные темы: javascript, kotlin, android studio,  мобильная разработка, React-Native, Flutter]]></description><link>https://teletype.in/@myrelax?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=myrelax</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/myrelax?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/myrelax?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 26 Jul 2026 15:53:33 GMT</pubDate><lastBuildDate>Sun, 26 Jul 2026 15:53:33 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@myrelax/1gZPQp7mPni</guid><link>https://teletype.in/@myrelax/1gZPQp7mPni?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=myrelax</link><comments>https://teletype.in/@myrelax/1gZPQp7mPni?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=myrelax#comments</comments><dc:creator>myrelax</dc:creator><title>О работе javascript (1)</title><pubDate>Mon, 25 Jul 2022 13:06:06 GMT</pubDate><category>матчасть js</category><description><![CDATA[Под капотом js]]></description><content:encoded><![CDATA[
  <p id="EdSw">Под капотом js</p>
  <p id="lldL">Наберем следующий код в редакторе (можно и в онлайн):</p>
  <pre id="EdSw" data-lang="javascript">console.log(varVal)
console.log(letVal)
console.log(constVal)
var varVal
let letVal
const constVal</pre>
  <p id="gUV4">Что мы увидим в консоли?</p>
  <p id="ozBq">А c этим что (удалим последнюю строку)?</p>
  <pre id="VHip" data-lang="javascript">console.log(varVal)
console.log(letVal)
console.log(constVal)
var varVal
let letVal
//const constVal</pre>
  <hr />
  <p id="A5bh">В первом случае мы увидим нечто типа (кстати сообщения могут различаться)</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <blockquote id="yl3K">...somedir/index.js:6<br />const constVal<br />      ^^^^^^^^<br />SyntaxError: Missing initializer in const declaration</blockquote>
  </section>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <blockquote id="96kw">undefined<br />ReferenceError: Cannot access &#x27;letVal&#x27; before initialization<br />    at Object.&lt;anonymous&gt; (/home/...somedir/index.js:2:13)<br />    at Module._compile (internal/modules/cjs/loader.js:999:30)</blockquote>
  </section>
  <p id="6PPq">Вопрос - почему так происходит?</p>
  <p id="QRPJ">В первом случае получаем ошибку в конце кода, а когда удаляем этот участок - то получаем ошибку на 2 строке. Отсюда мы уже можем понять что код &quot;обрабатывается&quot; как минимум 2 раза.</p>
  <p id="duL8">Нашел такой ресурс <a href="https://astexplorer.net/" target="_blank">https://astexplorer.net/</a>, где можно увидеть результат работы  <strong>парсера </strong>js кода. <strong>Парсер</strong> проходит по коду и переводит js код в некий список данных который называют <strong>AST. </strong>Проблему создания <strong>const</strong> без присвоения можно найти уже на этом этапе, поскольку сама концепция <strong>const</strong> заключается в том чтобы присвоить некое значение переменной и затем не менять его. Поэтому парсер проходит по строке где есть символы &quot;const&quot;, далее через пробел ожидает символы названия переменной, далее &quot;символ присвоения&quot; и значение переменной. В нашем коде последнего пункта нет, поэтому уже можно вывести сообщение об ошибке в коде. Кстати на этом же ресурсе можно менять парсеры, и например обнаружить что парсер &quot;typescript&quot; построит AST с нашим кодом=)</p>
  <p id="usEL"><em>P.S. Тут не раскрыта тема парсера и AST, надеюсь раскрыть эти тему в будущем. Напоминаю, написано мной и для себя. Если кому то помогло - отлично, если нашли ошибку - буду рад исправить, если можете подсказать что-то дельное по теме - непременно пишите</em></p>

]]></content:encoded></item></channel></rss>