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

নিচের কোডটি বিবেচনা করুন:

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

test()(); // আউটপুট 1
test()(); // আউটপুট 1

কেন সবসময় 1 সংখ্যাটি প্রিন্ট হবে? এটি বুঝতে আমাদের কোডটি অন্যভাবে লিখতে হবে:

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

let func1 = test(); //!! প্রথম ফাংশন
func1();  //আউটপুট 1

let func2 = test(); //!! দ্বিতীয় ফাংশন
func2();  //আউটপুট 1

অর্থাৎ, test()() এইভাবে: test ফাংশনটি কল করার ফলে প্রতিবার তার নিজস্ব ক্লোজার সহ একটি নতুন ফাংশন তৈরি হয় এবং সেই ফাংশনটি সাথে সাথেই কল হয়ে যায়।

Задание 1

কোড রান না করে নির্ধারণ করুন কনসোলে কি প্রিন্ট হবে:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

func()();
func()();
func()();
Задание 2

কোড রান না করে নির্ধারণ করুন কনসোলে কি প্রিন্ট হবে:

javascriptfunction func() {
  let num = 0;
  
  return function() {
    console.log(num);
    num++;
  };
}

let test = func;

test()();
test()();
test()();