На данный вопрос уже ответили:
Есть код, он выводит ошибку на второй строчке, почему?
getBigName(userName);
function getBigName(name) {
name = name + "";
return name.toUpperCase();
}
let userName = 'Ivan';
"Uncaught ReferenceError: userName is not defined"
Здесь подробно описано и сказано, что сперва нужно объявить переменную, а потом в неё записывать данные..
let userName = 'Ivan';
getBigName(userName);
function getBigName(name) {
name = name + "";
console.log(name);
return name.toUpperCase();
}
Ваш вопрос не в замыкании, а во всплытии (hoisting
)
В старой спецификации, переменные объявленные через var
всплывали
console.log(foo) // undefined
var foo = 'foo'
Ошибки такой код не вызовет, потому что движок расценит его как:
var foo;
console.log(foo)
foo = 'foo'
Именованные функции по спецификации всплывают вместе с объявлением
foo() // foo
function foo() {
console.log('foo')
}
В новой спецификацииes6
добавили два новых ключевых слова let
, const
, они тоже всплывают, но не так как мы ожидали
console.log(foo)
let foo = 'foo'
Движок прочитает это так
let foo
console.log(foo)
foo = 'foo'
Казалось бы, тоже самое что и с var
, но есть один ньюанс, хоть let
и всплывает, но использовать его до присвоения нельзя. Это называется временная мертвая зона. Поэтому такой код выкидывает ошибку
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сделал приложение в Instagram, получил cliendIDПрошел авторизацию, получил accessToken
Ищу программу для вставки на свой сайт или онлайн сервис, который позволит передавать 2 текста (программно) и сравнить их различияТо есть...