ตัวแปรท้องถิ่นของตัวนับใน JavaScript
พิจารณารหัสต่อไปนี้:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
test()(); // จะแสดง 1
test()(); // จะแสดง 1
ทำไมถึงแสดงตัวเลข 1 เสมอ? เพื่อที่จะเข้าใจสิ่งนี้ ลองเขียนโค้ดของเราใหม่ในรูปแบบอื่น:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
let func1 = test(); //!! ฟังก์ชันแรก
func1(); //จะแสดง 1
let func2 = test(); //!! ฟังก์ชันที่สอง
func2(); //จะแสดง 1
นั่นคือ การเรียกใช้ฟังก์ชัน test ในลักษณะนี้: test()() แต่ละครั้งจะสร้างฟังก์ชันของตัวเองพร้อมกับ Closure ของตัวเองและเรียกใช้ฟังก์ชันนั้นทันที
กำหนดว่า โดยไม่ต้องรันโค้ด อะไรจะถูกแสดงในคอนโซล:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
func()();
func()();
func()();
กำหนดว่า โดยไม่ต้องรันโค้ด อะไรจะถูกแสดงในคอนโซล:
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
let test = func;
test()();
test()();
test()();