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ň:
function 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:
function 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ň:
function 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ň:
function 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:
function 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:
function 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:
function 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äň:
function 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äň:
function test() {
let num1 = 1;
let num2 = 2;
return function() {
return num1 + num2;
}
}
console.log(test()());
Kody işletmezden öň, konsolda näme görkeziljekdigini kesgitläň:
function 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äň:
function test() {
let num = 1;
return function() {
return num;
}
}
let num = 2;
let func = test();
console.log(func());