JavaScript හි සන්දර්භය අහිමි වීම

අපට ශ්‍රිතයක් තුළ ශ්‍රිතයක් තිබිය හැකිය යැයි සිතමු. අපි බාහිර ශ්‍රිතය parent ලෙසත්, අභ්‍යන්තර ශ්‍රිතය child ලෙසත් නම් කරමු:

javascriptfunction parent() {
  function child() {
    
  }
}

පෙර පාඩම් වලින් ඔබ දන්නවා, යම් විචල්‍යයක් බාහිර ශ්‍රිතය තුළ අර්ථ දක්වන්නේ නම් - එය අභ්‍යන්තර ශ්‍රිතයට ලබා ගත හැකි බව:

javascriptfunction parent() {
  let str = 'abcde';
  
  function child() {
    console.log(str); // 'abcde' ප්‍රතිදානය කරයි
  }
  child(); // අභ්‍යන්තර ශ්‍රිතය ක්‍රියාත්මක කරමු
}

parent(); // බාහිර ශ්‍රිතය ක්‍රියාත්මක කරමු

කෙසේ වෙතත්, සූක්ෂ්මතාවයක් තිබේ: අභ්‍යන්තර ශ්‍රිතයට බාහිර ශ්‍රිතයේ සියලු විචල්‍යයන්ට ප්‍රවේශය තිබුණත්, එයට this වෙත ප්‍රවේශය නොමැත. එනම්: යම් බාහිර ශ්‍රිතයක් DOM අංගයකට බැඳී ඇත්නම්, එහි this එම අංගය වෙත යොමු වනු ඇත, නමුත් අභ්‍යන්තර ශ්‍රිතයේ this - එසේ නොවේ!

එහෙනම් අභ්‍යන්තර ශ්‍රිතයේ this යොමු වන්නේ කුමක්ටද? පිළිතුර: එය undefined (කැක්කාමි ආකාරයෙන්) ට සමාන වේ, මන්ද ශ්‍රිතය කිසිවකට බැඳී නොමැති නිසා.

අපි ප්‍රායෝගිකව පරීක්ෂා කර බලමු. අපට ආදාන ක්ෂේත්‍රයක් ලබා දී ඇතැයි සිතමු:

html<input id="elem" value="text">

මෙම ආදාන ක්ෂේත්‍රයට parent ශ්‍රිතය බඳිමු, එය ආදාන ක්ෂේත්‍රයෙන් අවධානය අහිමි වූ විට ක්‍රියාත්මක වේ:

javascript"use strict";

let elem = document.querySelector('#elem');
elem.addEventListener('blur', parent);

// අවධානය අහිමි වූ විට ක්‍රියාත්මක වේ:
function parent() {
  // මෙහි කිසියම් කේතයක් ඇත
  
  function child() {
    // මෙහි කිසියම් කේතයක් ඇත
  }
  child(); // දාර ශ්‍රිතය ක්‍රියාත්මක කරමු
}

this හි අන්තර්ගතය කොන්සෝලයට ප්‍රතිදානය කරමු ස්ථාන දෙකකදී: parent ශ්‍රිතය තුළ සහ child ශ්‍රිතය තුළ:

javascript"use strict";

let elem = document.querySelector('#elem');
elem.addEventListener('blur', parent);

function parent() {
  console.log(this); // අපගේ ආදාන ක්ෂේත්‍රය වෙත සබැඳිය ප්‍රතිදානය කරයි
  
  function child() {
    console.log(this); // undefined ප්‍රතිදානය කරයි
  }
  child();
}

මෙම කේතය ක්‍රියාත්මක කර, ආදාන ක්ෂේත්‍රයෙන් අවධානය අහිමි කර කොන්සෝලය දෙස බලන්න - ඔබට පෙනෙනු ඇති පළමු console.log කොන්සෝලයට අපගේ ආදාන ක්ෂේත්‍රය වෙත සබැඳිය ප්‍රතිදානය කරන අතර, දෙවනුව - සරලව undefined ප්‍රතිදානය කරන බව. මෙවැනි අවස්ථාවක, this අපේක්ෂා නොකළ අයුරින් අපට අවශ්‍ය දෙයට නොව වෙනත් දෙයකට යොමු වන විට, එය සන්දර්භය අහිමි වීම ලෙස හැඳින්වේ.

Задание 1

දැන් එක් ශ්‍රිතයක සහ දෙවන ශ්‍රිතයක අපි ආදාන ක්ෂේත්‍රයේ value ප්‍රතිදානය කරමු යැයි සිතමු. අදහස් දැක්වීම් වලින් සලකුණු කර ඇති කේත පේළිවල දී කුමක් ප්‍රතිදානය වේදැයි තීරණය කරන්න:

javascript"use strict";

let elem = document.querySelector('#elem');
elem.addEventListener('blur', parent);

function parent() {
  console.log(this.value); // කුමක් ප්‍රතිදානය කරයි?
  
  function child() {
    console.log(this.value); // කුමක් ප්‍රතිදානය කරයි?
  }
  child();
}