Hàm lồng nhau
Bài học 7 trên 14 trong khóa học Khai báo hàm trong JavaScript của Coddy.
Hàm lồng nhau giống như siêu anh hùng có cộng sự: chúng là những hàm mạnh mẽ có thể tạo và sử dụng các hàm khác bên trong chúng.
Hàm lồng nhau là một hàm được định nghĩa bên trong một hàm khác. Hàm bên trong có thể truy cập các biến và tham số của hàm bên ngoài, tạo nên phạm vi cục bộ bên trong hàm bên ngoài.
Hãy tưởng tượng bạn có một hàm chính (siêu anh hùng) cần trợ giúp cho một nhiệm vụ cụ thể. Thay vì dựa vào một hàm bên ngoài, hàm đó có thể tạo một hàm trợ giúp (cộng sự) bên trong để xử lý nhiệm vụ cụ thể ấy. Chỉ hàm chính mới có thể truy cập và sử dụng hàm trợ giúp này. Ví dụ:
function calculateDiscount(originalPrice, discountPercentage) {
function calculateDiscountAmount(price, discount) {
return price * discount; // Tính số tiền giảm giá (hàm bên trong)
}
const discountAmount = calculateDiscountAmount(originalPrice, discountPercentage / 100);
const finalPrice = originalPrice - discountAmount;
return finalPrice;
}
const discountedPrice = calculateDiscount(100, 20);
console.log(discountedPrice); // Đầu ra: 80- Hàm bên ngoài:
- Ta định nghĩa một hàm tên là
calculateDiscountnhận hai đối số:originalPricevàdiscountPercentage.
- Ta định nghĩa một hàm tên là
- Hàm bên trong:
- Bên trong hàm bên ngoài, ta định nghĩa một hàm khác tên là
calculateDiscountAmount. Đây là hàm lồng nhau. Hàm này nhận hai đối số:pricevàdiscount(lưu ý rằng hàm này không thể truy cập trực tiếporiginalPricehoặcdiscountPercentage).
- Bên trong hàm bên ngoài, ta định nghĩa một hàm khác tên là
- Đầu ra: Hàm trả về giá cuối cùng là 80 (sau khi áp dụng mức giảm giá 20%).
Thử thách
DễNhiệm vụ của bạn là tạo một hàm lồng nhau tên là calculateTaxAmount, hàm này nhận price và taxRate từ hàm bên ngoài calculateWithTax, tính số tiền thuế rồi trả về giá trị đó. (Số tiền thuế bằng giá nhân với thuế suất.)
Cuối cùng, hàm bên ngoài cần tính và trả về giá cuối cùng (bao gồm thuế) bằng cách cộng số tiền thuế vào giá gốc.
Tự làm thử
function calculateWithTax(product) {
let price = product.price;
let taxRate = product.taxRate;
// viết code ở đây
}
Tất cả bài học trong Khai báo hàm trong JavaScript
Tự luyện tập: Trình biên dịch JavaScript online