Truyền hàm làm tham số trong JavaScript
Các hàm, giống như số, chuỗi và mảng, có thể được truyền như tham số vào các hàm khác.
Chúng ta hãy xem xét kỹ hơn bằng một ví dụ thực tế.
Giả sử chúng ta có hàm test, nhận
hai tham số:
test(thamso1, thamso2);
Hãy truyền vào tham số đầu tiên của hàm test
một hàm ẩn danh, trả về
1, và vào tham số thứ hai - một hàm
ẩn danh trả về 2:
test(
function() {return 1;},
function() {return 2;}
);
Đoạn mã trên hiện chưa hoạt động, vì chúng ta chưa tạo ra chính hàm đó. Hãy tạo nó:
function test(func1, func2) {
}
Khi định nghĩa hàm, chúng ta đã chỉ định hai tham số
- func1 và func2. Các tham số này
không biết gì về việc cái gì sẽ được truyền vào chúng.
Chúng ta có thể, ví dụ, truyền số:
test(1, 2); // gọi hàm
function test(func1, func2) {
console.log(func1); // sẽ in ra 1
console.log(func2); // sẽ in ra 2
}
Và chúng ta cũng có thể truyền hàm:
test(
function() {return 1;}, // tham số đầu tiên
function() {return 2;} // tham số thứ hai
);
function test(func1, func2) {
console.log(func1); // sẽ in ra 'function() {return 1;}'
console.log(func2); // sẽ in ra 'function() {return 2;}'
}
Như bạn thấy, bây giờ console in ra mã nguồn của các hàm. Hãy làm sao để nó in ra kết quả của chúng. Để làm điều này, hãy thêm dấu ngoặc tròn cho các hàm:
test(
function() {return 1;},
function() {return 2;}
);
function test(func1, func2) {
console.log( func1() ); // sẽ in ra 1
console.log( func2() ); // sẽ in ra 2
}
Hãy in ra console tổng kết quả của hàm thứ nhất và hàm thứ hai:
test(
function() {return 1;},
function() {return 2;}
);
function test(func1, func2) {
console.log( func1() + func2() ); // sẽ in ra 3
}
Tạo hàm test, nhận làm tham số
3 hàm. Truyền vào
nó, tham số đầu tiên là hàm trả về
1, thứ hai - hàm trả về
2, thứ ba - hàm trả về
3. In ra console tổng kết quả
của các hàm.