Области видимости JS

326
20 июля 2017, 01:19

Почему внешняя глобальная переменная var value не меняется на true? Спасибо!

var value = 0;
function f() {
  if (1) {
    value = true;
  } else {
    var value = false;
  }
  alert( value );
}
f();
Answer 1

Если вкратце, то в JS есть такая магическая вещь, как поднятие переменных. Интерпретатор JavaScript всегда незаметно для нас перемещает (поднимает) объявления функций и переменных в начало области видимости.

Код

function test() { 
    someFunction(); 
    var x = 1; 
}

на самом деле интерпретируется так:

function test() { 
    var x; 
    someFunction(); 
    x = 1; 
}

В вашем случае происходит тоже самое, где область видимости одной переменной value является функция и в итоге происходит работа с локальной переменной.

Немного информации на тему есть https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Grammar_and_types

и

JavaScript и «поднятие» переменных и объявлений функций

READ ALSO
Как передать данные из компонента в сервис в Angular 2

Как передать данные из компонента в сервис в Angular 2

У меня есть сервис и компонента, в котором есть переменная partNumber - сообщает номер раздела в котором я нахожусь и дает 1, 2 или 3

633
Как определить город юзера?

Как определить город юзера?

В последнее время вижу много сайтов, которые при открытии выдают модальное окно с предполагаемым городом и выбором другого, если определенно...

366
Нет подсказок в Форме в Safari

Нет подсказок в Форме в Safari

Заметил такой баг или не баг, что в safari при нажатии "отправить" с пустыми полями не выводит подсказок типа "Заполните это поле", подсказки стандартные,...

305