Hàm trả về hàm trong JavaScript
Giả sử chúng ta có một hàm như thế này, trả về một chuỗi:
function func() {
return '!';
}
let result = func();
console.log(result); // sẽ hiển thị '!'
Bây giờ, thay vì một chuỗi, tương tự như vậy, hãy trả về một hàm ẩn danh:
function func() {
return function() {
return '!';
};
}
let result = func(); // biến result sẽ là một hàm
console.log(result); // sẽ hiển thị 'function() {return '!';}'
Như bạn thấy, biến result bây giờ
là một hàm. Hãy in ra console
kết quả thực thi của nó. Để làm điều đó, chúng ta thêm
dấu ngoặc đơn:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // sẽ hiển thị '!'
Vì lệnh gọi func() trả về một hàm,
nên chúng ta có thể ngay lập tức gọi hàm được trả về đó,
như thế này: func()() - cặp
dấu ngoặc đơn đầu tiên nhận được kết quả của hàm
func (bản thân kết quả này là một hàm),
và cặp dấu ngoặc đơn thứ hai được áp dụng cho kết quả của
func.
Hãy thử:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // sẽ hiển thị '!'
Tạo hàm func1, sao cho khi được gọi
như thế này: func1()(), sẽ trả về
số 1. Tạo một hàm tương tự
func2, trả về số 2.
Tìm tổng kết quả của các hàm này.