Глобальные переменные в функциях в JavaScript
В JavaScript (в других языках чаще всего не так) переменные, определенные снаружи функции, будут видны внутри этой функции. Такие переменные называются глобальными. Посмотрим на примере:
let num = 1; // переменная снаружи функции
function func() {
console.log(num); // переменная num видна внутри функции
}
func(); // выведет 1
На самом деле переменная должна быть определена не перед определением функции, а перед ее вызовом:
function func() {
console.log(num);
}
let num = 1; // переменная снаружи функции
func(); // выведет 1
Если менять значение переменной и после этого каждый раз вызывать функцию - алерт каждый раз будет выдавать разные результат:
function func() {
console.log(num);
}
let num; // объявим переменную
num = 1; // задаем значение 1
func(); // выведет 1
num = 2; // задаем значение 2
func(); // выведет 2
Если у нас несколько функций, то глобальная переменная будет доступна в каждой из этих функций:
function func1() {
console.log(num);
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // выведет 1
func2(); // выведет 1
Если в одной из функций произойдут изменения с глобальной переменной, то эта переменная поменяется во всех функциях, использующих эту переменную:
function func1() {
console.log(num);
num++; // меняем глобальную переменную
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // выведет 1
func2(); // выведет 2
Так как любая из функций легко может поменять глобальную переменную, то их использование представляет собой рассадник трудноуловимых ошибок. По этой причине использование глобальных переменных в скрипте нужно сводить к минимуму. Желательно, чтобы их вообще не было или было самое минимальное количество.
Определите, не запуская код, что выведется в консоль:
let num = 1;
function func() {
console.log(num);
}
func();
Определите, не запуская код, что выведется в консоль:
let num = 1;
function func() {
console.log(num);
}
num = 2;
func();
Определите, не запуская код, что выведется в консоль:
function func() {
console.log(num);
}
let num;
num = 1;
func();
num = 2;
func();