ฟังก์ชันที่ซ้อนกันใน JavaScript
สมมติว่าเรามีฟังก์ชันที่รับพารามิเตอร์เป็นตัวเลขสองตัวและคืนค่าผลรวมของกำลังสองของตัวเลขเหล่านี้:
function func(num1, num2) {
return num1 * num1 + num2 * num2;
}
console.log(func(2, 3)); // แสดงผล 13 (ผลลัพธ์ของ 2 * 2 + 3 * 3)
มาแยกการดำเนินการยกกำลังสองออกเป็นฟังก์ชันช่วยเหลือ square:
function square(num) {
return num * num;
}
function func(num1, num2) {
return square(num1) + square(num2);
}
console.log(func(2, 3)); // แสดงผล 13
สมมติว่าเราแน่ใจว่าฟังก์ชัน square จะถูกใช้เฉพาะในฟังก์ชัน func เท่านั้นและจะไม่ใช้ที่อื่นอีก
ในกรณีนี้ มันจะสะดวกหากทำให้ไม่มีใครใช้มันโดยไม่ได้ตั้งใจ (คุณเองหรือโปรแกรมเมอร์คนอื่นที่ทำงานร่วมกับคุณ)
ใน JavaScript มีวิธีแก้ไขที่สง่างาม: เราสามารถวางฟังก์ชันช่วยเหลือ square ของเราไว้ภายใน func ได้ ในกรณีนี้ฟังก์ชันช่วยเหลือของเราจะสามารถเข้าถึงได้เฉพาะภายใน func เท่านั้น และจะไม่สามารถเข้าถึงจากภายนอกได้
มาทำกัน:
function func(num1, num2) {
function square(num) {
return num * num;
}
return square(num1) + square(num2);
}
console.log(func(2, 3)); // แสดงผล 13
การพยายามเรียกใช้ square จากภายนอก func จะทำให้เกิดข้อผิดพลาด:
function func(num1, num2) {
function square(num) {
return num * num;
}
return square(num1) + square(num2);
}
console.log(square(2)); //!! จะเกิดข้อผิดพลาด
สร้างฟังก์ชัน func ที่จะรับพารามิเตอร์เป็นตัวเลขสองตัวและคืนค่าผลรวมของกำลังสองของตัวเลขตัวแรกกับกำลังสามของตัวเลขตัวที่สอง สร้างฟังก์ชันช่วยเหลือ square สำหรับการยกกำลังสอง และฟังก์ชันช่วยเหลือ cube สำหรับการยกกำลังสาม