Как javascript может иметь лексическую область, если область назначается во время выполнения? - PullRequest
0 голосов
/ 06 января 2020

Я запутался в том, что javascript имеет лексическую область видимости.

Лексическая область видимости: Лексическая область видимости означает любые переменные в области видимости, из которых вы определяете функцию (в отличие от того, когда вы ее вызываете) ) находятся в области видимости функции.

Однако в JS ее: область видимости не назначается при определении и компиляции функции, а назначается во время выполнения, то есть при вызове функции

В следующем примере: если бы у JS была лексическая область действия, я получил бы ошибку. Однако я этого не делаю из-за подъема и во время выполнения js проверки двигателя на x.

function f() {
 console.log(x);
}
const x = 10;
f(); // 10

Может ли кто-нибудь объяснить на примере, как JS может иметь лексическую область действия? Спасибо!

1 Ответ

0 голосов
/ 06 января 2020

См. Пример ниже, все что вне функции f скомпилировано и переменные подняты. Но содержимое внутри функции f не поднимается / не анализируется, пока не будет вызвано. А локальные переменные внутри f остаются доступными внутри функции (т. Е. Лексическая область действия функции).

function f() {
  console.log(x);
  var a = 20;
}

const x = 10;

f(); // 10


console.log(a);
...