லூப்களில் ஜாவாஸ்கிரிப்ட் மூடல்களைப் புரிந்துகொள்வது: நடைமுறை எடுத்துக்காட்டுகள்

JavaScript

ஜாவாஸ்கிரிப்டில் லூப் மூடல்களை அவிழ்த்தல்

ஜாவாஸ்கிரிப்ட் டெவலப்பர்கள் லூப்களுக்குள் மூடல்களைப் பயன்படுத்தும் போது எதிர்பாராத நடத்தையை எதிர்கொள்கின்றனர். இந்த சிக்கல் குழப்பத்தை ஏற்படுத்தும், குறிப்பாக மூடல்களின் கருத்துக்கு புதியவர்களுக்கு.

இந்த கட்டுரையில், பொதுவான சிக்கல்களை விளக்கும் நடைமுறை உதாரணங்களை ஆராய்வோம் மற்றும் லூப்களில் மூடல்களை திறம்பட பயன்படுத்துவதற்கான தீர்வுகளை வழங்குவோம், நிகழ்வு கேட்பவர்கள், ஒத்திசைவற்ற குறியீடு அல்லது வரிசைகளுக்கு மேல் திரும்புதல்.

கட்டளை விளக்கம்
let பிளாக்-ஸ்கோப்டு லோக்கல் மாறியை அறிவிக்கிறது, விருப்பமாக அதை ஒரு மதிப்பிற்கு துவக்குகிறது. சுழற்சியின் ஒவ்வொரு மறு செய்கைக்கும் அதன் சொந்த நோக்கம் இருப்பதை உறுதி செய்யப் பயன்படுகிறது.
const பிளாக்-ஸ்கோப், படிக்க-மட்டும் பெயரிடப்பட்ட மாறிலியை அறிவிக்கிறது. ஒரு செயல்பாடு அல்லது மாறியை உருவாக்கப் பயன்படுகிறது, அதன் மதிப்பு மாறக்கூடாது.
Promise ஒத்திசைவற்ற செயல்பாட்டின் இறுதியில் நிறைவு (அல்லது தோல்வி) மற்றும் அதன் விளைவான மதிப்பைக் குறிக்கிறது.
setTimeout ஒரு செயல்பாட்டை அழைக்கிறது அல்லது குறிப்பிட்ட எண்ணிக்கையிலான மில்லி விநாடிகளுக்குப் பிறகு ஒரு வெளிப்பாட்டை மதிப்பிடுகிறது.
addEventListener ஏற்கனவே உள்ள நிகழ்வு ஹேண்ட்லர்களை மேலெழுதாமல் குறிப்பிட்ட உறுப்புடன் நிகழ்வு ஹேண்ட்லரை இணைக்கிறது.
IIFE உடனடியாக செயல்படுத்தப்பட்ட செயல்பாடு வெளிப்பாடு. வரையறுக்கப்பட்டவுடன் இயங்கும் செயல்பாடு. சுழல்களில் உள்ளூர் நோக்கங்களை உருவாக்கப் பயன்படுகிறது.
for...in ஒரு பொருளின் எண்ணிலடங்கா பண்புகளை, தன்னிச்சையான வரிசையில் மீண்டும் கூறுகிறது.
for...of ஒரு குறிப்பிட்ட வரிசையில், மீண்டும் இயக்கக்கூடிய பொருளின் மதிப்புகளை (வரிசை அல்லது சரம் போன்றவை) மீண்டும் மீண்டும் செய்கிறது.

லூப்களில் ஜாவாஸ்கிரிப்ட் மூடல்களைப் புரிந்துகொள்வது

முந்தைய உதாரணங்களில் வழங்கப்பட்ட ஸ்கிரிப்டுகள் ஜாவாஸ்கிரிப்டில் உள்ள லூப்களுக்குள் மூடப்படும் பொதுவான சிக்கலைக் குறிக்கின்றன. பயன்படுத்தும் போது ஒரு ஒரு வளையத்திற்குள் அறிவிப்பு, அனைத்து மறு செய்கைகளும் ஒரே செயல்பாட்டு நோக்கத்தைப் பகிர்ந்து கொள்கின்றன. அதனால்தான், முதல் எடுத்துக்காட்டில், வெளியீடு "எனது மதிப்பு: 3" மூன்று முறை. பயன்படுத்துவதே தீர்வு , இது ஒவ்வொரு மறு செய்கைக்கும் சரியான மதிப்பை பராமரிக்கும் பிளாக் ஸ்கோப்பை உருவாக்குகிறது. இந்த அணுகுமுறை ஒவ்வொரு மறு செய்கைக்கும் அதன் சொந்த நோக்கம் இருப்பதை உறுதி செய்கிறது, இதனால் செயல்பாடு அழைக்கப்படும் போது சரியான மதிப்பைப் பாதுகாக்கிறது. அறிவிப்பை எவ்வாறு மாற்றுவது என்பதை ஸ்கிரிப்ட் காட்டுகிறது செய்ய let சிக்கலைச் சரிசெய்து, "எனது மதிப்பு: 0", "எனது மதிப்பு: 1" மற்றும் "எனது மதிப்பு: 2" ஆகியவற்றைப் பதிவு செய்கிறது.

ஒத்திசைவற்ற குறியீட்டிற்கு, அதே மூடல் சிக்கல் எழலாம். பயன்படுத்தி மற்றும் உடன் செயல்படுகிறது ஒவ்வொரு ஒத்திசைவற்ற அழைப்பும் சரியான மறு செய்கை மதிப்பை பராமரிக்கிறது என்பதை உறுதி செய்கிறது. பயன்படுத்துவதன் மூலம் ஸ்கிரிப்ட் காட்டுகிறது wait உடன் , ஒவ்வொரு தீர்க்கப்பட்ட வாக்குறுதியும் எதிர்பார்க்கப்படும் மதிப்பை பதிவு செய்கிறது. நிகழ்வு கேட்பவர்களும் இதே போன்ற சிக்கல்களை எதிர்கொள்ளலாம்; இருப்பினும், கேட்பவர் செயல்பாட்டை ஒரு இல் மூடுதல் (உடனடியாக செயல்படுத்தப்பட்ட செயல்பாடு வெளிப்பாடு) ஒவ்வொரு மறு செய்கைக்கும் ஒரு புதிய நோக்கத்தை உருவாக்குவதன் மூலம் சரியான மதிப்பைப் பிடிக்க உதவுகிறது. பயன்பாடு மற்றும் for...of லூப்கள் மூடல்களில் ஸ்கோப்பிங்கின் முக்கியத்துவத்தை மேலும் நிரூபிக்கிறது, குறியீட்டையும் மதிப்பையும் எவ்வாறு சரியாகப் பிடிப்பது என்பதைக் காட்டுகிறது ஒவ்வொரு லூப் மறு செய்கைக்கும் தனித்தனி நோக்கங்களை உருவாக்க.

ஜாவாஸ்கிரிப்ட் லூப்களில் உள்ள மூடல் சிக்கல்களை லெட் மூலம் தீர்க்கிறது

ஜாவாஸ்கிரிப்ட் (ES6)

let funcs = [];
// Let's create 3 functions
for (let i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value:", i);
  };
}
for (let j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}

ஒத்திசைவற்ற குறியீட்டில் சரியான மூடல் மதிப்புகளை உறுதி செய்தல்

ஜாவாஸ்கிரிப்ட் (ES6)

const wait = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));
for (let i = 0; i < 3; i++) {
  // Log `i` as soon as each promise resolves.
  wait(i * 100).then(() => console.log(i));
}

IIFE ஐப் பயன்படுத்தி நிகழ்வு கேட்பவர்களில் சரியான மூடல்

ஜாவாஸ்கிரிப்ட் (ES6)

var buttons = document.getElementsByTagName("button");
// Let's create 3 functions
for (var i = 0; i < buttons.length; i++) {
  // as event listeners
  (function(i) {
    buttons[i].addEventListener("click", function() {
      // each should log its value.
      console.log("My value:", i);
    });
  })(i);
}

லூப்களுக்கு...இன் மற்றும் ஃபார்... உடன் சரியான மூடல்

ஜாவாஸ்கிரிப்ட் (ES6)

const arr = [1, 2, 3];
const fns = [];
for (const i in arr) {
  fns.push(((i) => () => console.log("index:", i))(i));
}
for (const v of arr) {
  fns.push(((v) => () => console.log("value:", v))(v));
}
for (const n of arr) {
  const obj = { number: n };
  fns.push(((n, obj) => () => console.log("n:", n, "|", "obj:", JSON.stringify(obj)))(n, obj));
}
for (const f of fns) {
  f();
}

மேம்பட்ட ஜாவாஸ்கிரிப்ட் செயல்பாடுகளில் மூடல்களின் பயன்பாட்டை ஆராய்தல்

மூடல்கள் என்பது ஜாவாஸ்கிரிப்டில் உள்ள ஒரு அடிப்படைக் கருத்தாகும், இது ஒரு செயல்பாட்டை அதன் உள்ளடக்கிய நோக்கத்திலிருந்து மாறிகளை அணுக அனுமதிக்கிறது, அந்த நோக்கம் மூடப்பட்ட பின்னரும். நினைவாற்றல், கறி மற்றும் செயல்பாட்டு நிரலாக்கத்தில் பயன்படுத்தப்படும் மேம்பட்ட செயல்பாடுகளை உருவாக்கும் போது இந்த அம்சம் மிகவும் சக்தி வாய்ந்தது. எடுத்துக்காட்டாக, விலையுயர்ந்த செயல்பாடு அழைப்புகளின் முடிவுகளை நினைவில் வைத்து, அதே உள்ளீடுகள் மீண்டும் நிகழும்போது தற்காலிக சேமிப்பில் உள்ள முடிவைத் தர நினைவூட்டல் மூடல்களைப் பயன்படுத்துகிறது. மூடல்களைப் பயன்படுத்துவதன் மூலம், செயல்திறனை மேம்படுத்தும் மிகவும் திறமையான மற்றும் உகந்த குறியீட்டை உருவாக்கலாம், குறிப்பாக ஃபைபோனச்சி வரிசைகளைக் கணக்கிடுவது போன்ற சுழல்நிலை செயல்பாடுகளில்.

மூடல்களின் மற்றொரு மேம்பட்ட பயன்பாடு ஜாவாஸ்கிரிப்ட் பொருள்களுக்குள் தனிப்பட்ட மாறிகள் மற்றும் செயல்பாடுகளை உருவாக்குதல், தனிப்பட்ட முறைகள் மற்றும் பண்புகளை உருவகப்படுத்துதல் ஆகும். இந்த நுட்பம் பெரும்பாலும் தொகுதி வடிவங்களில் பயன்படுத்தப்படுகிறது மற்றும் செயல்பாட்டை இணைக்க மற்றும் உலகளாவிய நோக்கத்தை மாசுபடுத்துவதை தவிர்க்க உடனடியாக செயல்பாட்டு வெளிப்பாடுகள் (IIFE) பயன்படுத்தப்படுகிறது. மேலும், நிகழ்வு கையாளுதல் மற்றும் ஒத்திசைவற்ற நிரலாக்கத்தில் மூடல்கள் முக்கிய பங்கு வகிக்கின்றன, அவை காலப்போக்கில் நிலை மற்றும் சூழலைத் தக்கவைக்க உதவுகின்றன. மூடல்களைப் புரிந்துகொள்வதும் திறம்படப் பயன்படுத்துவதும் உங்கள் ஜாவாஸ்கிரிப்ட் நிரலாக்கத் திறனைக் கணிசமாக உயர்த்தி, மேலும் மட்டு, மறுபயன்பாடு மற்றும் பராமரிக்கக்கூடிய குறியீட்டை எழுத உங்களுக்கு உதவும்.

  1. ஜாவாஸ்கிரிப்டில் மூடல் என்றால் என்ன?
  2. மூடல் என்பது, அந்த நோக்கத்திற்கு வெளியே செயல்பாடு செயல்படுத்தப்பட்டாலும், அதன் லெக்சிகல் நோக்கத்திற்கான அணுகலைத் தக்கவைக்கும் ஒரு செயல்பாடாகும்.
  3. சுழல்களில் மூடல்கள் ஏன் ஏற்படுகின்றன?
  4. லூப்களில் மூடல்கள் ஏற்படுகின்றன, ஏனெனில் லூப் அதே மாறி குறிப்பைப் பிடிக்கும் செயல்பாடுகளை உருவாக்குகிறது, இது சரியாகக் கையாளப்படாவிட்டால் எதிர்பாராத நடத்தைக்கு வழிவகுக்கும்.
  5. லூப்களில் உள்ள மூடல் சிக்கல்களை எவ்வாறு சரிசெய்வது?
  6. பயன்படுத்தி அதற்கு பதிலாக சுழல்களில் அல்லது பயன்படுத்தி (உடனடியாக செயல்படுத்தப்பட்ட செயல்பாடு வெளிப்பாடுகள்) ஒவ்வொரு மறு செய்கைக்கும் ஒரு புதிய நோக்கத்தை உருவாக்குவதன் மூலம் மூடல் சிக்கல்களை சரிசெய்ய முடியும்.
  7. IIFE என்றால் என்ன?
  8. ஒரு இது உருவாக்கப்பட்ட உடனேயே செயல்படுத்தப்படும் ஒரு செயல்பாடாகும், இது பெரும்பாலும் ஒரு புதிய நோக்கத்தை உருவாக்க மற்றும் மாறி மோதல்களைத் தவிர்க்கப் பயன்படுகிறது.
  9. ஒத்திசைவற்ற நிரலாக்கத்தில் மூடல்களைப் பயன்படுத்த முடியுமா?
  10. ஆம், வாக்குறுதிகள் மற்றும் அழைப்புகள் போன்ற ஒத்திசைவற்ற செயல்பாடுகளில் நிலை மற்றும் சூழலைப் பராமரிக்க ஒத்திசைவற்ற நிரலாக்கத்தில் மூடல்கள் அவசியம்.
  11. நினைவாற்றல் என்றால் என்ன, மூடல்கள் எவ்வாறு உதவுகின்றன?
  12. நினைவூட்டல் என்பது விலையுயர்ந்த செயல்பாடு அழைப்புகளின் முடிவுகளை தேக்ககப்படுத்துவதற்கான ஒரு தேர்வுமுறை நுட்பமாகும். பல செயல்பாடு அழைப்புகளில் தற்காலிக சேமிப்பிற்கான அணுகலைத் தக்கவைத்துக்கொள்வதன் மூலம் மூடல்கள் உதவுகின்றன.
  13. நிகழ்வு கையாளுதலில் மூடல்கள் எவ்வாறு உதவுகின்றன?
  14. நிகழ்வு கையாளுபவர்களுக்கு தேவையான மாறிகளின் நிலையை மூடுதல்கள் தக்கவைத்து, நிகழ்வு தூண்டப்படும் போது அவை சரியாக செயல்படுவதை உறுதி செய்கிறது.
  15. ஜாவாஸ்கிரிப்டில் உள்ள மாட்யூல் பேட்டர்ன் என்ன?
  16. தனிப்பட்ட மாறிகள் மற்றும் செயல்பாடுகளை உருவாக்க, செயல்பாடுகளை இணைக்கவும் மற்றும் உலகளாவிய மாசுபாட்டைத் தவிர்க்கவும் தொகுதி முறை மூடல்களைப் பயன்படுத்துகிறது.
  17. மூடல்கள் ஜாவாஸ்கிரிப்டில் தனிப்பட்ட முறைகளை உருவகப்படுத்த முடியுமா?
  18. ஆம், அவை வரையறுக்கப்பட்ட செயல்பாட்டின் எல்லைக்குள் மட்டுமே அணுகக்கூடிய மாறிகள் மற்றும் செயல்பாடுகளை வைத்து மூடல்கள் தனிப்பட்ட முறைகளை உருவகப்படுத்தலாம்.

ஜாவாஸ்கிரிப்டில், குறிப்பாக லூப்களுக்குள் மூடுதல்களை மாஸ்டரிங் செய்வது, யூகிக்கக்கூடிய மற்றும் திறமையான குறியீட்டை எழுதுவதற்கு முக்கியமானது. அந்நியப்படுத்துவதன் மூலம் , , மற்றும் , டெவலப்பர்கள் பொதுவான ஆபத்துக்களைத் தவிர்க்கலாம் மற்றும் சரியான மாறி ஸ்கோப்பிங்கை உறுதி செய்யலாம். இந்த புரிதல் ஒத்திசைவற்ற பணிகள் மற்றும் நிகழ்வு-உந்துதல் நிரலாக்கத்தைக் கையாளும் திறனை மேம்படுத்துகிறது, இறுதியில் மிகவும் வலுவான பயன்பாடுகளுக்கு வழிவகுக்கும்.