2

Не могу понять почему не перезаписывается значение у глобальной переменной. Объясните пожалуйста подробно, как вообще работает скрипт.

var title = "external title";

function example(){ title = "changing external title"; console.log(title); var title = "internal title"; }

example(); // "changing external title" console.log(title); // "external title"

Darth
  • 13,217
ikar
  • 548

1 Answers1

3

var всплывает. Поэтому title внутри функции - это не external title.

Darth
  • 13,217
  • то есть, var title = "internal title"; становится в начало тела функции? – ikar Oct 05 '17 at 08:36
  • Не совсем. var title - всплывает в начало. А title = "internal title"; остается там где есть. – Darth Oct 05 '17 at 08:38
  • var title - всплывает при инициализации, да? – ikar Oct 05 '17 at 08:58
  • @Ikar копипаст: JavaScript "поднимает" только объявление, но не инициализацию. – Darth Oct 05 '17 at 09:05
  • если закомментировать строчку title = "changing external title"; то код выведет undefined и external title. Следовательно ничего не всплывает. – ikar Oct 05 '17 at 09:09
  • @Ikar переменная объявлена, но не инициализирована. Если бы она не была объявлена - вы бы получили не undefined, а эксепшн Uncaught ReferenceError: title is not defined. (Если бы она при этом и в глобальной области видимости тоже не была бы объявлена, разумеется) – Darth Oct 05 '17 at 09:10