Вы должны различать guish объявления переменных и изменения переменных (или инициализацию для использования ваших слов). Иногда оба действия выполняются одновременно (let vid = 'value';
), но это не обязательно.
В Javascript переменную можно использовать до тех пор, пока она была объявлена. Тогда его значение будет undefined
.
Что касается области видимости вашей переменной, она может быть видна обеими вашими функциями, потому что она объявлена вне ее, посмотрите на второй фрагмент, если бы он был объявленный внутри функции init
, он будет доступен только для нее и не будет виден за ее пределами.
let vid;
function test(){
console.log(vid); //declared and not initialized
}
function test2(){
console.log(vid2); //not declared (and not initialized)
}
test(); //undefined value (no error)
test2(); //error: not declared
function init(){
let vid;
}
function test3(){
init();
console.log(vid); //declared in another scope
}
test3(); //error: not declared