all-threads-bot

Frontender`s Spectre

JavaScript | Практика #179 | Область видимости | ★★★☆☆

24 апреля 2023 г., 14:11

<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'.

Переменные с ключевым словом letconst) поднимаются в начало функции, в отличие от var, которые не инициализируется. Они недоступны до того, как мы объявим (инициализируем) их строку. Это называется "временной мертвой зоной". Когда мы пытаемся получить доступ к переменным до их объявления, JavaScript выдает ReferenceError.

Если бы мы не объявили переменную lang в функции getLang, движок javascript посмотрел бы вниз по цепочки области действия. Внешняя область имеет переменную с именем lang со значением JavaScript. В этом случае он бы записал JavaScript.

let lang = 'JavaScript'

function getLang() {
  console.log(lang)
}

getLang() // JavaScript