JavaScript ශ්‍රිතවල වාග් පරිසරයන් භාවිතා කිරීම

අපට ශ්‍රිතයක් තිබිය යුතුය, එහි ප්‍රති result ලයක් ලෙස වෙනත් ශ්‍රිතයක් ආපසු ලබා දේ:

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

මව් ශ්‍රිතයට කිසියම් අගයන් තිබේ නම්, එම අගයන් ආපසු ලබා දෙන ශ්‍රිතයේ වාග් පරිසරයේ අඩංගු වේ:

javascriptfunction test() {
  let num = 1; // මව් ශ්‍රිතයේ අගය
  
  return function() {
    // වාග් පරිසරය = {num: 1}
  }
}

අපේ ආපසු ලබා දෙන ශ්‍රිතයේ කේතය තුළ console.log ලියන්න, එය අගය num පෙන්වයි:

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

දැන් අපි මව් ශ්‍රිතය ගෙන්වමු test සහ එහි ක්‍රියාකාරී ප්‍රති result ලය func අගය ලෙස ලියමු:

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

let func = test();

func අගයට ආපසු ලබා දෙන ශ්‍රිතය ලියා ඇත. අපි අපේ ශ්‍රිතය ගෙන්වමු - එහි ප්‍රති result ලය ලෙස එය අගය num පෙන්වයි:

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

let func = test();
func(); // 1 පෙන්වයි

ශ්‍රිතයෙන් පිටත අගය num පෙන්වීමට උත්සාහ කළහොත් - එය ලබා ගත නොහැක:

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

console.log(num); // num අගය මෙහි ලබා ගත නොහැක

ඔබට පෙනෙන පරිදි, ස්ථානීය අගය num අපේ ශ්‍රිතයේ වාග් පරිසරයට බැඳී ඇති අතර දැන්, ඕනෑම ස්ථානයක අපට කේතය ක්‍රියාත්මක කර අගය num ලබා ගත හැකිය, එම ස්ථානයේ අගය ලබා ගත නොහැකි වුවද.

ඇත්ත වශයෙන්ම සමාන ප්‍රති result ලයක් ලබා ගත හැකිය num අගය ගෝලීය කිරීමෙන්:

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

let num = 1; // ගෝලීය අගය
let func = test();
func(); // 1 පෙන්වයි

කෙසේ වෙතත්, මෙහි සැලකිය යුතු වෙනසක් පවතී: නව පිටපතේ අගය num හැකිය ශ්‍රිතවලින් පිටත වෙනස් කරන්න (එය ගෝලීය බැවින්), නමුත් පැරණි පිටපතේ - නොහැක.

Задание 1

කේතය ක්‍රියාත්මක නොකර, කුමක් පෙන්වනු ඇත්ද යන්න නිශ්චය කරන්න:

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

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

කේතය ක්‍රියාත්මක නොකර, කුමක් පෙන්වනු ඇත්ද යන්න නිශ්චය කරන්න:

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

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

කේතය ක්‍රියාත්මක නොකර, කුමක් පෙන්වනු ඇත්ද යන්න නිශ්චය කරන්න:

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

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

කේතය ක්‍රියාත්මක නොකර, කුමක් පෙන්වනු ඇත්ද යන්න නිශ්චය කරන්න:

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

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