<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@myrelax</title><subtitle>Написано мной и для себя. Основные темы: javascript, kotlin, android studio,  мобильная разработка, React-Native, Flutter</subtitle><author><name>@myrelax</name></author><id>https://teletype.in/atom/myrelax</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/myrelax?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@myrelax?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=myrelax"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/myrelax?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-26T15:53:35.501Z</updated><entry><id>myrelax:1gZPQp7mPni</id><link rel="alternate" type="text/html" href="https://teletype.in/@myrelax/1gZPQp7mPni?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=myrelax"></link><title>О работе javascript (1)</title><published>2022-07-25T13:06:06.558Z</published><updated>2023-05-21T18:38:23.603Z</updated><category term="matchast-js" label="матчасть js"></category><summary type="html">Под капотом js</summary><content type="html">
  &lt;p id=&quot;EdSw&quot;&gt;Под капотом js&lt;/p&gt;
  &lt;p id=&quot;lldL&quot;&gt;Наберем следующий код в редакторе (можно и в онлайн):&lt;/p&gt;
  &lt;pre id=&quot;EdSw&quot; data-lang=&quot;javascript&quot;&gt;console.log(varVal)
console.log(letVal)
console.log(constVal)
var varVal
let letVal
const constVal&lt;/pre&gt;
  &lt;p id=&quot;gUV4&quot;&gt;Что мы увидим в консоли?&lt;/p&gt;
  &lt;p id=&quot;ozBq&quot;&gt;А c этим что (удалим последнюю строку)?&lt;/p&gt;
  &lt;pre id=&quot;VHip&quot; data-lang=&quot;javascript&quot;&gt;console.log(varVal)
console.log(letVal)
console.log(constVal)
var varVal
let letVal
//const constVal&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;A5bh&quot;&gt;В первом случае мы увидим нечто типа (кстати сообщения могут различаться)&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;yl3K&quot;&gt;...somedir/index.js:6&lt;br /&gt;const constVal&lt;br /&gt;      ^^^^^^^^&lt;br /&gt;SyntaxError: Missing initializer in const declaration&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;96kw&quot;&gt;undefined&lt;br /&gt;ReferenceError: Cannot access &amp;#x27;letVal&amp;#x27; before initialization&lt;br /&gt;    at Object.&amp;lt;anonymous&amp;gt; (/home/...somedir/index.js:2:13)&lt;br /&gt;    at Module._compile (internal/modules/cjs/loader.js:999:30)&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;p id=&quot;6PPq&quot;&gt;Вопрос - почему так происходит?&lt;/p&gt;
  &lt;p id=&quot;QRPJ&quot;&gt;В первом случае получаем ошибку в конце кода, а когда удаляем этот участок - то получаем ошибку на 2 строке. Отсюда мы уже можем понять что код &amp;quot;обрабатывается&amp;quot; как минимум 2 раза.&lt;/p&gt;
  &lt;p id=&quot;duL8&quot;&gt;Нашел такой ресурс &lt;a href=&quot;https://astexplorer.net/&quot; target=&quot;_blank&quot;&gt;https://astexplorer.net/&lt;/a&gt;, где можно увидеть результат работы  &lt;strong&gt;парсера &lt;/strong&gt;js кода. &lt;strong&gt;Парсер&lt;/strong&gt; проходит по коду и переводит js код в некий список данных который называют &lt;strong&gt;AST. &lt;/strong&gt;Проблему создания &lt;strong&gt;const&lt;/strong&gt; без присвоения можно найти уже на этом этапе, поскольку сама концепция &lt;strong&gt;const&lt;/strong&gt; заключается в том чтобы присвоить некое значение переменной и затем не менять его. Поэтому парсер проходит по строке где есть символы &amp;quot;const&amp;quot;, далее через пробел ожидает символы названия переменной, далее &amp;quot;символ присвоения&amp;quot; и значение переменной. В нашем коде последнего пункта нет, поэтому уже можно вывести сообщение об ошибке в коде. Кстати на этом же ресурсе можно менять парсеры, и например обнаружить что парсер &amp;quot;typescript&amp;quot; построит AST с нашим кодом=)&lt;/p&gt;
  &lt;p id=&quot;usEL&quot;&gt;&lt;em&gt;P.S. Тут не раскрыта тема парсера и AST, надеюсь раскрыть эти тему в будущем. Напоминаю, написано мной и для себя. Если кому то помогло - отлично, если нашли ошибку - буду рад исправить, если можете подсказать что-то дельное по теме - непременно пишите&lt;/em&gt;&lt;/p&gt;

</content></entry></feed>