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

Глобальные переменные

Все переменные, которые объявлены вне функций, являются глобальными:

	<.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 можно двумя способами: