Странное поведение if (true) в области видимости JavaScript ..? - PullRequest
2 голосов
/ 03 мая 2020

Итак, я тестировал область действия JavsScript (var, let и const) и обнаружил странное поведение, которое я не мог понять.

var write = document.getElementById('demo');

function test() {
    var m = 'hello';
}

test();

write.innerHTML = m;
//This doesn't work

В указанном выше случае JS не может получить доступ var m , объявленный локально из глобальной области.

var write = document.getElementById('demo');

if(true) {
    var m = 'hello';
}

write.innerHTML = m;
//This works

В указанном выше случае JS доступ var m объявлено локально из глобальной области видимости.

Может кто-нибудь объяснить, почему это ..?

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Это из-за подъема . Также var имеет область действия уровня функции

var write = document.getElementById('demo');
var m; // m will be undefined here, declared but not initialized
if (true) {
  m = 'hello'; // m is initialized her
}

write.innerHTML = m;
<div id='demo'></div>
2 голосов
/ 03 мая 2020

В первом случае объявление , var находится на уровне функции и поэтому ограничивается function test

Во втором случае , если область действия является областью видимости блока и, следовательно, объявление var выходит в глобальную область видимости из-за Hoisting

Таким образом, в первом случае вы не можете использовать m вне функционального теста, но вы можете сделать это во втором случае .

...