Область видимости переменных

Переменные могут быть глобальными и локальными. Глобальные переменные доступны в любом месте кода, а локальные только внутри функции.

На примере ниже созданы две переменные: lang (глобльная) и framework (локальная).

var lang = 'JavaScript';
function getLang() {
    var framework = 'jQery';
}

lang; // JavaScript
framework; // Ошибка: Uncaught ReferenceError: framework is not defined

При вызове переменной framework происходит ошибка, т.к. она доступна только внутри функции.

Если у глобальной и локальной переменной будет одно имя, то будет создана локальная переменная, которая не затронет текущую глобальную переменную.

var lang = 'JavaScript';
function getLang() {
    var lang = 'jQery';
    return lang;
}

getLang(); // jQuery
lang; // JavaScript

На примере выше видно, что внутри функции снова создаётся переменная lang, при этом, она не заменяет уже существующую глобальную переменную.

Доступ к переменной в пределах текущего блока

В новой версии JavaScript возможно создавать переменные через ключевое слово let. Данные переменные доступны в пределах текущего блока.

if (true) {
    let lang = "JavaScript";
    lang; // JavaScript
}

lang; // Ошибка: Uncaught ReferenceError: lang is not defined

На примере выше видно, что вызов переменной lang за пределами if вызывает ошибку, т.к. данная переменная не доступна за пределами того блока, в котором она была создана.

Аналогично для других блоков, например for или while.