কম্পিউটার

জাভাস্ক্রিপ্টের স্ব-নির্বাহী বেনামী ফাংশনে এই সমস্যাটি কী?


ধরা যাক এখানে একটি নমুনা কোড স্নিপেট এবং আমাদের এই স্নিপেটের সম্ভাব্য আউটপুট বলতে হবে এবং এর জন্য একটি ব্যাখ্যা দিতে হবে

var name = 'Zakir';
(() => {
   name = 'Rahul';
   return;
   console.log(name);
   function name(){
      let lastName = 'Singh';
   }
})();
console.log(name);

চলুন একটি নির্বোধ পদ্ধতির সাথে এই সমস্যার লাইনের মধ্য দিয়ে যাই

1 → 'জাকির' পরিবর্তনশীল নামে সংরক্ষিত

3 → আমরা একটি স্ব-নির্বাহী বেনামী ফাংশনের ভিতরে প্রবেশ করি

4 → পরিবর্তনশীল নামটি 'রাহুল'

এ পুনঃপ্রবর্তিত হয়েছে

5 → রিটার্ন স্টেটমেন্টের সম্মুখীন হয়েছে, তাই আমরা ফাংশন থেকে প্রস্থান করি

15 → স্ক্রিনে নাম পরিবর্তনশীল প্রিন্ট করুন যার বর্তমান মান হল 'রাহুল'

সুতরাং, চূড়ান্ত আউটপুট হবে

Rahul

কিন্তু, দুর্ভাগ্যবশত, এটি ভুল, চলুন আমরা কোথায় ভুল করেছি তা দেখার জন্য আবার কোডটি দেখি, এবার পরিবর্তনশীল এবং ফাংশন উত্তোলনের ধারণা মাথায় রেখে।

1 → 'জাকির' পরিবর্তনশীল নামে সংরক্ষিত

3 → আমরা একটি স্ব-নির্বাহী বেনামী ফাংশনের ভিতরে প্রবেশ করি

যখন আমরা ফাংশনটি প্রবেশ করি, ফাংশন উত্তোলন শুরু হয় এবং ফাংশনের নাম() যা স্ব-নির্বাহী ফাংশনের নীচে সংজ্ঞায়িত করা হয় তা স্ব-নির্বাহী ফাংশনের একেবারে উপরে উত্তোলিত হয় এবং সেই মধ্যবর্তী অবস্থায় কোডটি এমন কিছু হবে −

উদাহরণ

let name = 'Zakir';
(() => {
   let name;
   name = 'Rahul';
   return;
   console.log(name);
   name = function(){
      let lastName = 'Singh';
   }
})();
console.log(name);

মনে রাখবেন যে যখনই একটি পরিবর্তনশীল/ফাংশনকে তার সুযোগের শীর্ষে উত্তোলন করা হয় তখন এটি শুধুমাত্র সংজ্ঞায়িত এবং সূচনা করা হয়, এটি তার প্রকৃত অবস্থানে শুরু হয়, শীর্ষে এটি অনির্ধারিত, তবে এটি বিদ্যমান।

সুতরাং, যখন ভেরিয়েবলের নামটি পুনরায় চালু করা হয় তখন এটি স্থানীয় ভেরিয়েবলের নাম যা পুনরায় চালু হয় এবং গ্লোবাল ভেরিয়েবল নয়, তাই এর পরে আমরা স্ব-নির্বাহী ফাংশন থেকে ফিরে আসি এবং কনসোলে গ্লোবাল ভেরিয়েবলের নাম প্রিন্ট করি, যা এখনও 'জাকির' ধারণ করে। অতএব, আউটপুট হবে −

আউটপুট

Zakir

  1. জাভাস্ক্রিপ্টে setInterval() পদ্ধতি কি?

  2. জাভাস্ক্রিপ্টে setTimeout() পদ্ধতি কি?

  3. জাভাস্ক্রিপ্টে একটি বেনামী ফাংশন কি?

  4. জাভাস্ক্রিপ্ট - একটি ক্লাসে একটি ফাংশনের আগে "পাওয়া" কীওয়ার্ড কী?