JavaScript-de funksiýalaryň leksik ýagdaýynyň ulanylyşy
Biziň netijesi hökmünde başga bir funksiýa yzyna gaýtaryan funksiýamyz bar diýeliň:
javascriptfunction test() {
return function() {
}
}
Eger ata-enanyň funksiýasy hasaýatly üýtgeýän böleklerine eýe bolsa, onda bu üýtgeýänler yza gaýtarylýan funksiýanyň leksik ýagdaýynda bar boljak:
javascriptfunction test() {
let num = 1; // ata-enanyň funksiýasynyň üýtgeýjisi
return function() {
// leksik ýagdaý = {num: 1}
}
}
Geliň, yza gaýtarylýan funksiýamyzyň kodyna
num üýtgeýjisiniň bahasyny görkezýän
console.log ýazaýalyň:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
Indi geliň, ata-enanyň test funksiýasyny
çagyrýaly we onuň işiniň netijesini
func üýtgeýjisinde ýazaýalyň:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func üýtgeýjisine yza gaýtarylýan
funksiýa ýazylyşdyr. Geliň, funksiýamyzy
çagyrýaly – ol öz netijesi hökmünde
num üýtgeýjisiniň mazmunyny görkezer:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // 1 görkezer
Eger-de ýönekeý ýagdaýda num üýtgeýjisini
funksiýanyň daşynda görkezmäge synanşsaňyz,
ol elýeterli bolmaz:
javascriptfunction test() {
let num = 1;
return function() {
console.log(num);
}
}
console.log(num); // num üýtgeýjisi bu ýerde elýeterli däl
Görşüňiz ýaly, ýerli num üýtgeýjisi
biziň funksiýamyzyň leksik ýagdaýyna
birikdirildi we indi, bu funksiýany kodunyň
isli ýerinde çagyrýanyňyzda, biz
num üýtgeýjisiniň bahasyny alyp
bileris, eger-de çagyrylan ýerde bu üýtgeýji
özüňe elýeterli bolmasa hem.
Aslynda, şuňa meňzeş netijä
num üýtgeýjisini global ýasamak
bilen hem ýetip bolýar:
javascriptfunction test() {
return function() {
console.log(num);
}
}
let num = 1; // global üýtgeýji
let func = test();
func(); // 1 görkezer
Emma bu ýerde esasy tapawut bolar:
täze wariantda num üýtgeýjisini
funksiýalaryň daşynda üýtgedip bolýar
(sebäbi ol global), köne wariantda bolsa
ýok.
Kody işletmezden öň, konsolda näme görkeziljekdigini kesgitläň:
javascriptfunction test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
let func = test();
console.log(func());
Kody işletmezden öň, konsolda näme görkeziljekdigini kesgitläň:
javascriptfunction test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Kody işletmezden öň, konsolda näme görkeziljekdigini kesgitläň:
javascriptfunction test() {
let num1 = 1;
return function() {
return num1 + num2;
}
}
let num2 = 2;
let func = test();
console.log(func());
Kody işletmezden öň, konsolda näme görkeziljekdigini kesgitläň:
javascriptfunction test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());