Hàm callback trong JavaScript
Hàm có thể được truyền vào các hàm khác dưới dạng tham số. Các hàm-tham số như vậy được gọi là callback (callback). Hãy cùng xem cách làm việc với chúng qua ví dụ.
Giả sử chúng ta muốn tạo một hàm, nhận tham số đầu tiên là một mảng, và tham số thứ hai là một callback, sẽ được áp dụng cho từng phần tử của mảng:
function each(arr, callback) {
// mã ở đây
}
Hãy viết phần triển khai cho hàm của chúng ta:
function each(arr, callback) {
let result = [];
for (let elem of arr) {
result.push( callback(elem) ); // gọi hàm callback
}
return result;
}
Hàm each của chúng ta là hàm tổng quát.
Điều này có nghĩa là chúng ta có thể truyền vào nó
những callback khác nhau, thực hiện các thao tác khác nhau
trên mảng. Đồng thời, mã của hàm chúng ta vẫn giữ nguyên
không đổi - chỉ có
các callback được truyền vào là thay đổi.
Lấy ví dụ, hãy sử dụng hàm của chúng ta để bình phương mỗi phần tử của một mảng bất kỳ. Để làm điều này, chúng ta truyền vào một callback tương ứng làm tham số:
let result = each([1, 2, 3, 4, 5], function(num) {
return num ** 2;
});
console.log(result);
Bây giờ hãy lập phương các phần tử của mảng. Để làm điều này, chúng ta truyền một callback khác thực hiện thao tác này làm tham số:
let result = each([1, 2, 3, 4, 5], function(num) {
return num ** 3;
});
console.log(result);
Cho một mảng số. Sử dụng hàm
each mà chúng ta đã tạo, hãy tăng gấp đôi mỗi
phần tử.
Cho một mảng chuỗi. Sử dụng hàm
each mà chúng ta đã tạo, hãy đảo ngược các ký tự
của mỗi chuỗi theo thứ tự ngược lại.
Cho một mảng chuỗi. Sử dụng hàm
each mà chúng ta đã tạo, hãy viết hoa
ký tự đầu tiên của mỗi chuỗi.