RealBoy2009
@RealBoy2009
Студент

ES6 и почему не работает видимость переменных?

Добрый день! в ES6 добавили создание локальных переменных let , решил я проверить одним из способов, это нововведение в действии, но увы, не работает.

let r = 333;
if( 3 === 3) { console.log(r) } // 333


или
let t = 1;
function a(){ console.log(t) } // 1


Почему так? насколько я понял из описания, let делает видимость только в локальном блоке, в отличии от var, она должна даже в теле блокаif уже иметь значениеnot defined, но, как видим, она везде читабельна и к ней такой же доступ как и уvar.

P.S может потому, что я пишу в консоли Chrome? тогда почему он не сообщает что не понимает, ведь он отлично присваивает let какое либо значения, не предупреждая меня, что он не умеет с этим работать.
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 2
hedint
@hedint
Senior front-end developer
Областью видимости переменных, объявленных ключевым словом let, является блок, в котором они объявлены, и все его подблоки.
Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
Давайте разберем сначала var:
var a = 1;
(function() {
  var a = 2;
  console.log(a); // 2
})();
console.log(a); // 1

var a = 1;
do {
  var a = 2;
  console.log(a); // 2
} while(false);
console.log(a); // 2

Что происходит:
1. var a = 1; объявляет a видимым для себя и дочерних блоков. a будет = 1 если внутри будет for или function. И снаружи, но только если не в function. Например var a = 2 исполнилось, но пропало, так как вызвано в функции (лямбде).
2. var a = 2 (который в do...while) переобъявляет первый a = 1, так как do..while - не function.

Теперь let:
let a = 1;
(function() {
  let a = 2;
  console.log(a); // 2
})();
console.log(a); // 1

let a = 1;
do {
  let a = 2;
  console.log(a); // 2
} while(false);
console.log(a); // 1

Что происходит:
1. Здесь как в var
2. let a = 2 (который в do...while) объявляет a в своей области видимости, первый a = 1 остается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы