ตัวแปรท้องถิ่นของตัวนับใน JavaScript

พิจารณารหัสต่อไปนี้:

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()() แต่ละครั้งจะสร้างฟังก์ชันของตัวเองพร้อมกับ Closure ของตัวเองและเรียกใช้ฟังก์ชันนั้นทันที

Задание 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()();