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