Utumizi wa Mazingira ya Kileksika ya Kazi katika JavaScript

Acha tuwe na kazi ambayo inarudisha kazi nyingine kama matokeo yake:

javascriptfunction test() {
  return function() {
    
  }
}

Ikiwa kazi ya mzazi ina anuwai yoyote, basi anuwai hizo zitakuwamo kwenye mazingira ya kileksika ya kazi inayorudishwa:

javascriptfunction test() {
  let num = 1; // anuwai ya kazi ya mzazi
  
  return function() {
    // mazingira ya kileksika = {num: 1}
  }
}

Tuandike kwenye msimbo wa kazi yetu inayorudishwa console.log, unaotoa thamani ya anuwai num:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

Sasa tuite kazi ya mzazi test na tuandike matokeo yake kwenye anuwai func:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();

Kazi inayorudishwa itaandikwa kwenye anuwai func. Tuiite kazi yetu - itatoa matokeo ya kuonyesha yaliyomo kwenye anuwai num:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // itatoa 1

Iwapo tu utajaribu kuonyesha anuwai num nje ya kazi - haitapatikana:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

console.log(num); // anuwai num haipatikani hapa

Kama unavyoona, anuwai ya ndani num iliunganishwa na mazingira ya kileksika ya kazi yetu na sasa, ikiitwa mahali popote kwenye msimbo kazi hii, tunaweza kupata thamani ya anuwai num, hata kama mahali pa kiitiko anuwai yenyewe haipatikani.

Kwa kweli matokeo sawa yanaweza kupatikana kwa kufanya anuwai num kuwa ya ulimwengu:

javascriptfunction test() {
  return function() {
    console.log(num);
  }
}

let num = 1; // anuwai ya ulimwengu
let func = test();
func(); // itatoa 1

Hata hivyo, kutakuwa na tofauti kubwa hapa: katika toleo jipya anuwai num inaweza kubadilishwa nje ya kazi (kwa kuwa ni ya ulimwengu), lakini katika toleo la zamani - haifai.

Задание 1

Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:

javascriptfunction test() {
  let num1 = 1;
  let num2 = 2;
  
  return function() {
    return num1 + num2;
  }
}

let func = test();
console.log(func());
Задание 2

Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:

javascriptfunction test() {
  let num1 = 1;
  let num2 = 2;
  
  return function() {
    return num1 + num2;
  }
}

console.log(test()());
Задание 3

Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:

javascriptfunction test() {
  let num1 = 1;
  
  return function() {
    return num1 + num2;
  }
}

let num2 = 2;
let func = test();
console.log(func());
Задание 4

Amua, bila kukimbiza msimbo, nini kitaonyeshwa kwenye konsoli:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    return num;
  }
}

let num = 2;
let func = test();
console.log(func());