জাভাস্ক্রিপ্টে গ্লোবাল কাউন্টার ভেরিয়েবল

ভেরিয়েবল num কে ফাংশনের বাইরে নিয়ে যাওয়া যাক, যার মাধ্যমে এটিকে গ্লোবাল করা হয়েছে:

javascriptlet num = 1; // গ্লোবাল ভেরিয়েবল

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

এই ক্ষেত্রে, সমস্ত রিটার্ন করা ফাংশন এই গ্লোবাল ভেরিয়েবলটি পরিবর্তন করবে এবং কাউন্টারগুলি একে অপরের উপর নির্ভরশীল হয়ে কাজ করবে:

javascriptlet num = 1;

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

let func1 = test(); // প্রথম কাউন্টার
func1();  // আউটপুট হবে 1
func1();  // আউটপুট হবে 2

let func2 = test(); // দ্বিতীয় কাউন্টার
func2();  // আউটপুট হবে 3
func2();  // আউটপুট হবে 4

কেন আমাদের আগের কোডটি স্বাধীন কাউন্টার তৈরি করেছিল? আমি এই কোডটি স্মরণ করিয়ে দিচ্ছি:

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

ব্যাপারটি হল যে num ভেরিয়েবলটি test ফাংশনের ভিতরে লোকাল। সুতরাং test এর প্রতিটি কল এর নিজস্ব লোকাল ভেরিয়েবল তৈরি করে।

অতএব, রিটার্ন করা ফাংশনগুলি test ফাংশনের তাদের নিজস্ব লোকাল ভেরিয়েবলের উপর রেফারেন্স করবে। এইভাবেই স্বাধীন অপারেশন অর্জন করা হয়।

যদি num কে একটি গ্লোবাল ভেরিয়েবল করা হয় - এটিও একটি ক্লোজার হবে। শুধুমাত্র রিটার্ন করা ফাংশনগুলির লেক্সিকাল পরিবেশ একই num ভেরিয়েবলের উপর রেফারেন্স করে - এই ভেরিয়েবলের যেকোনো পরিবর্তন সমস্ত ফাংশনে দৃশ্যমান হবে।

Задание 1

কód চালু না করে নির্ধারণ করুন কী কনসোলে আউটপুট হবে:

javascriptlet counter = 0;
    
function test() {
  return function() {
    console.log(counter);
    counter++;
  };
}

let func = test;

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Задание 2

কód চালু না করে নির্ধারণ করুন কী কনসোলে আউটপুট হবে:

javascriptfunction test() {
  let counter = 0;
  
  return function() {
    return function() {
      console.log(counter);
      counter++;
    };
  };
}

let func = test()();

let func1 = func;
let func2 = func;
func1();
func2();
func1();
func2();
Задание 3

কód চালু না করে নির্ধারণ করুন কী কনসোলে আউটপুট হবে:

javascriptfunction test() {
  let counter = 0;
  
  return function() {
    return function() {
      console.log(counter);
      counter++;
    };
  };
}

let func = test();

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();