Hàm lồng nhau trong JavaScript
Giả sử chúng ta có một hàm nhận vào tham số là hai số và trả về tổng bình phương của hai số đó:
function func(num1, num2) {
return num1 * num1 + num2 * num2;
}
console.log(func(2, 3)); // sẽ in ra 13 (kết quả của 2 * 2 + 3 * 3)
Hãy tách phép tính bình phương ra
một hàm phụ square:
function square(num) {
return num * num;
}
function func(num1, num2) {
return square(num1) + square(num2);
}
console.log(func(2, 3)); // sẽ in ra 13
Giả sử chúng ta chắc chắn rằng hàm square
sẽ chỉ được sử dụng trong hàm func
mà không dùng ở bất kỳ nơi nào khác.
Trong trường hợp này, sẽ rất tiện nếu làm sao để không ai vô tình sử dụng nó (chính bạn hoặc một lập trình viên khác đang làm việc cùng với bạn).
JavaScript có một giải pháp tinh tế: có thể
đặt hàm phụ square của chúng ta
vào bên trong func. Khi đó
hàm phụ của chúng ta sẽ chỉ có thể truy cập được
bên trong func, còn từ bên ngoài - thì không.
Hãy thực hiện điều này:
function func(num1, num2) {
function square(num) {
return num * num;
}
return square(num1) + square(num2);
}
console.log(func(2, 3)); // sẽ in ra 13
Việc thử gọi square từ bên ngoài func
sẽ dẫn đến lỗi:
function func(num1, num2) {
function square(num) {
return num * num;
}
return square(num1) + square(num2);
}
console.log(square(2)); //!! sẽ báo lỗi
Tạo một hàm func, nhận vào các tham số
là hai số, và trả về tổng
bình phương của số thứ nhất với lũy thừa ba của số thứ hai.
Để làm điều này, hãy tạo hàm phụ
square để tính bình phương của một số,
và hàm phụ cube để tính lũy thừa ba
của một số.