Funksiyaların Leksik Muhiti JavaScript-də Necə Tətbiq Olunur
Tutaq ki, bizim nəticəsi kimi başqa bir funksiya qaytaran funksiyamız var:
function test() {
return function() {
}
}
Əgər ana funksiyanın hər hansı dəyişənləri varsa, bu dəyişənlər qaytarılan funksiyanın leksik mühitində yer alacaq:
function test() {
let num = 1; // ana funksiyanın dəyişəni
return function() {
// leksik mühit = {num: 1}
}
}
Gəlin qaytarılan funksiyamızın koduna num
dəyişəninin qiymətini çıxaran console.log yazaq:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
Gəlin indi ana test funksiyasını çağıraq
və onun işinin nəticəsini func dəyişəninə yazaq:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func dəyişəninə qaytarılan funksiya yazılacaq.
Gəlin funksiyamızı çağıraq - o, öz nəticəsi kimi
num dəyişəninin məzmununu çıxaracaq:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1 çıxaracaq
Əgər sadəcə num dəyişənini funksiyadan kənarda
çıxarmağa çalışsaq, o, əlçatan olmayacaq:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // num dəyişəni burada əlçatan deyil
Gördüyünüz kimi, num lokal dəyişəni funksiyamızın
leksik mühitinə bağlandı və indi, bu funksiyanı kodun hər hansı
yerində çağıranda, num dəyişəninin qiymətini əldə edə
bilərik, hətta çağırış yerində bu dəyişən özü əlçatan olmasa belə.
Əslində, oxşar nəticəyə num dəyişənini qlobal etməklə
də nail olmaq olar:
function test() {
return function() {
console.log(num);
}
}
let num = 1; // qlobal dəyişən
let func = test();
func(); // 1 çıxaracaq
Lakin burada əhəmiyyətli bir fərq olacaq:
yeni variantda num dəyişənini funksiyaların xaricində
dəyişmək olar (çünki o, qlobaldır), köhnə variantda isə - olmaz.
Kodu işə salmadan müəyyən edin ki, konsola nə çıxarılacaq:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
Kodu işə salmadan müəyyən edin ki, konsola nə çıxarılacaq:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Kodu işə salmadan müəyyən edin ki, konsola nə çıxarılacaq:
function test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
Kodu işə salmadan müəyyən edin ki, konsola nə çıxarılacaq:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());