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.

Задание 1

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());
Задание 2

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()());
Задание 3

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());
Задание 4

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());