Почему вы не можете ссылаться на переменную при ее теневом копировании? - PullRequest
0 голосов
/ 08 мая 2018

Почему блок A приводит к ReferenceError?

const something = 'something';

console.log ();

try {

    // Block A
    {

        const something = something;

    }

} catch (e) { console.log(e); }

console.log ();

// Block B
{

    const something = 'somethingElse';

}

Это предотвращает создание тени для переменной с одним из ее свойств.

1 Ответ

0 голосов
/ 08 мая 2018

Поскольку const переменные подняты , и вы пытаетесь получить к нему доступ в собственной временной мертвой зоне. Есть три способа решения этой проблемы:

  • Просто используйте другое имя переменной, не скрывайте неглобальные переменные. Это сбивает с толку.
  • Не используйте const, не создавайте локальную область видимости - просто переназначьте переменную внутри блока. Это решение может быть неприменимо везде.
  • Использование IIFE:

    const something = 'something';
    (function(something) {
    //        ^^^^^^^^^ inner scope
        …
    }(something));
    //^^^^^^^^^ outer scope
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...