Локальные и глобальные переменные в функциях JavaScript

Локальные переменные

Это переменные объявленные внутри тела функции и их будет видно только внутри функции

Например

function hiEva () {
	let sayHi = "Привет Шиноби"; // локальная переменная
	console.log(sayHi);
}
hiEva(); // Привет Шиноби
console.log(sayHi); // Ошибка, значения переменной видно только внутри функции

Внешние переменные

У функции есть доступ к внешним переменным, то есть во время исполнения функции мы можем прочитать как локальные данные так и внешние, например

let userName = Eva;

function showMessage() {
	let message = 'Привет, ' + userName;
	console.log(message);
}

showMessage(); // Привет, Eva

Так же функция обладает полным доступом к внешним переменным и даже может изменять их значения

let userName = Alice;

function showMessage () {
	userName = "Eva"; // Меняем значение
	let message = "Привет, " + userName;
	console.log(message);
}

console.log(userName); // Alice

showMessage();

console.log(userName); // Привет, Eva

При выполнении кода, функция сначала ищет локальные переменные, если не находит обращается в внешним