<p><strong>Ответ: <code>ReferenceError</code></strong></p>
<p dir="auto">Каждая функция имеет свой собственный <em>контекст исполнения</em> (или <em>область видимости</em>). Функция <code>getLang</code> сначала ищет в своем собственном контексте (области видимости), чтобы увидеть, содержит ли она переменную <code>lang</code>, к которой мы пытаемся получить доступ. В этом случае функция <code>getLang</code> содержит собственную переменную <code>lang</code>: мы объявляем переменную <code>lang</code> с ключевым словом <code>let</code> и значением <code>'CSS'</code>.</p>
<p dir="auto">Переменные с ключевым словом <code>let</code> (и <code>const</code>) поднимаются в начало функции, в отличие от <code>var</code>, которые <em>не инициализируется</em>. Они недоступны до того, как мы объявим (инициализируем) их строку. Это называется "временной мертвой зоной". Когда мы пытаемся получить доступ к переменным до их объявления, JavaScript выдает <code>ReferenceError</code>.</p>
<p dir="auto">Если бы мы не объявили переменную <code>lang</code> в функции <code>getLang</code>, движок javascript посмотрел бы вниз по <em>цепочки области действия</em>. Внешняя область имеет переменную с именем <code>lang</code> со значением <code>JavaScript</code>. В этом случае он бы записал <code>JavaScript</code>.</p>
<pre class="language-javascript"><code>let lang = 'JavaScript'
function getLang() {
console.log(lang)
}
getLang() // JavaScript</code></pre>
<p><strong>Ответ: <code>ReferenceError</code></strong></p>
<p dir="auto">Каждая функция имеет свой собственный <em>контекст исполнения</em> (или <em>область видимости</em>). Функция <code>getLang</code> сначала ищет в своем собственном контексте (области видимости), чтобы увидеть, содержит ли она переменную <code>lang</code>, к которой мы пытаемся получить доступ. В этом случае функция <code>getLang</code> содержит собственную переменную <code>lang</code>: мы объявляем переменную <code>lang</code> с ключевым словом <code>let</code> и значением <code>'CSS'</code>.</p>
<p dir="auto">Переменные с ключевым словом <code>let</code> (и <code>const</code>) поднимаются в начало функции, в отличие от <code>var</code>, которые <em>не инициализируется</em>. Они недоступны до того, как мы объявим (инициализируем) их строку. Это называется "временной мертвой зоной". Когда мы пытаемся получить доступ к переменным до их объявления, JavaScript выдает <code>ReferenceError</code>.</p>
<p dir="auto">Если бы мы не объявили переменную <code>lang</code> в функции <code>getLang</code>, движок javascript посмотрел бы вниз по <em>цепочки области действия</em>. Внешняя область имеет переменную с именем <code>lang</code> со значением <code>JavaScript</code>. В этом случае он бы записал <code>JavaScript</code>.</p>
<pre class="language-javascript"><code>let lang = 'JavaScript'
function getLang() {
console.log(lang)
}
getLang() // JavaScript</code></pre>
Ниже представлено пояснение.
Ответ: ReferenceError
Каждая функция имеет свой собственный контекст исполнения (или область видимости). Функция getLang
сначала ищет в своем собственном контексте (области видимости), чтобы увидеть, содержит ли она переменную lang
, к которой мы пытаемся получить доступ. В этом случае функция getLang
содержит собственную переменную lang
: мы объявляем переменную lang
с ключевым словом let
и значением 'CSS'
.
Переменные с ключевым словом let
(и const
) поднимаются в начало функции, в отличие от var
, которые не инициализируется. Они недоступны до того, как мы объявим (инициализируем) их строку. Это называется "временной мертвой зоной". Когда мы пытаемся получить доступ к переменным до их объявления, JavaScript выдает ReferenceError
.
Если бы мы не объявили переменную lang
в функции getLang
, движок javascript посмотрел бы вниз по цепочки области действия. Внешняя область имеет переменную с именем lang
со значением JavaScript
. В этом случае он бы записал JavaScript
.
let lang = 'JavaScript'
function getLang() {
console.log(lang)
}
getLang() // JavaScript