Область видимости переменных
Глобальные переменные
Все переменные, которые объявлены вне функций, являются глобальными:
<.script>
var x = 5;
let d = 8;
function displaySquare(){
var z = x * x;
console.log(z);
}
<./script>
Здесь переменные x и d доступны из любого места программы. А вот переменная z глобальной не является.
Локальные переменные
Переменная, определенная внутри функции, является локальной:
function displaySquare(){
var z = 10;
console.log(z);
let b = 8;
console.log(b);
}
Переменные z и b являются локальными, они существуют только в пределах функции. Вне функции их нельзя использовать:
function displaySquare(){
var z = 10;
console.log(z);
}
console.log(z); //ошибка, так как z не определена
Когда функция заканчивает свою работу, то все переменные, определенные в функции, уничтожаются.
Сокрытие переменных
var z = 89;
function displaySquare(){
var z = 10;
console.log(z); // 10
}
displaySquare(); // 10
var или let
При использовании оператора let каждый блок кода определяет новую область видимости, в которой существует переменная:
let z = 10;
function displayZ(){
let z = 20;
{
let z = 30;
console.log("Block:", z);
}
console.log("Function:", z);
}
displayZ();
console.log("Global:", z);
С помощью оператора var мы не можем определить одновременно переменную с одним и тем же именем и в функции, и в блоке кода в этой функции:
function displaySquare(){
var z = 20;
{
var z = 30; // Ошибка ! Переменная z уже определена
console.log("Block:", z);
}
console.log("Function:", z);
}
Константы
Область видимости const аналогична переменным let:
const z = 10;
function displayZ(){
const z = 20;
{
const z = 30;
console.log("Block:", z); // 30
}
console.log("Function:", z); // 20
}
displayZ();
console.log("Global:", z); // 10
Необъявленные переменные
Если мы не используем ключевое слово при определении переменной в функции, то такая переменная будет глобальной. Например:
function bar(){
foo = "25";
}
bar();
console.log(foo); // 25
strict mode
Определение глобальных переменных в функциях может вести к потенциальным ошибкам. Чтобы их избежать используется строгий режим или strict mode:
"use strict";
function bar(){
foo = "25";
}
bar();
console.log(foo);
Установить режим strict mode можно двумя способами:
- добавить выражение "use strict" в начало кода JavaScript, тогда strict mode будет применяться для всего кода
- добавить выражение "use strict" в начало тела функции, тогда strict mode будет применяться только для этой функции