Closure và Gọi Hàm Ngay Lập Tức trong JavaScript
Như bạn đã biết, có thể gọi một hàm ẩn danh ngay lập tức và gán kết quả của nó cho một biến nào đó:
let result = function() {
return '!';
}();
console.log(result); // sẽ in ra '!'
Thường thì hàm được gọi ngay lập tức, trong trường hợp như vậy, được đặt trong dấu ngoặc đơn, mặc dù điều này không thực sự cần thiết. Việc này được thực hiện để có thể thấy ngay rằng hàm đang được gọi ngay lập tức:
let result = (function() {
return '!';
})();
console.log(result); // sẽ in ra '!'
Bây giờ hãy để kết quả của hàm được gọi ngay lập tức là một hàm ẩn danh:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // sẽ in ra '!'
Hãy làm sao để hàm được trả về
lưu trữ biến num trong closure:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Nếu thêm num++ vào, thì hàm
func sẽ trở thành một bộ đếm hoàn chỉnh:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); //sẽ in ra 1
func(); //sẽ in ra 2
func(); //sẽ in ra 3
func(); //sẽ in ra 4
func(); //sẽ in ra 5
Không nhìn vào code của tôi, hãy tự mình thực hiện một bộ đếm tương tự.
Hãy sửa đổi hoạt động của bộ đếm sao cho
nó đếm đến 5, sau đó bắt đầu đếm lại
từ đầu.