Достъп до външни променливи на функции в 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
Още веднъж: всъщност функцията знае стойностите на външните променливи, дори без да бъде извикана.