⊗jsPmClCr 263 of 505 menu

Bộ đếm sử dụng Closure trong JavaScript

Hãy viết lại đoạn mã chúng ta đã xem xét để hàm được trả về mỗi lần tăng giá trị của biến num lên một đơn vị:

function test() { let num = 1; return function() { console.log(num); num++; // thêm một } } let func = test();

Kết quả là mỗi lần gọi hàm func sẽ in ra console một giá trị mới:

function test() { let num = 1; return function() { console.log(num); num++; } } let func = test(); 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

Như vậy, chúng ta đã triển khai một bộ đếm số lần gọi hàm, sử dụng closure (chính xác hơn là sử dụng biến num từ closure của hàm chúng ta).

Lưu ý rằng mỗi lần gọi hàm test sẽ trả về một hàm mới, mà sẽ có closure riêng của nó. Có nghĩa là các bộ đếm khác nhau sẽ hoạt động độc lập:

function test() { let num = 1; return function() { console.log(num); num++; }; } let func1 = test(); // bộ đếm thứ nhất func1(); //sẽ in ra 1 func1(); //sẽ in ra 2 let func2 = test(); // bộ đếm thứ hai func2(); //sẽ in ra 1 func2(); //sẽ in ra 2

Như vậy, cùng một biến num cho các hàm khác nhau sẽ có giá trị khác nhau!

Có nghĩa là nếu chúng ta gọi hàm test hai lần, thì các hàm nhận được từ nó sẽ hoạt động một cách độc lập và mỗi hàm trong số này sẽ có biến num độc lập của riêng nó.

Tự mình, không nhìn vào mã của tôi, hãy triển khai bộ đếm số lần gọi hàm, hoạt động dựa trên closure.

Giả sử hàm trong closure lưu trữ số 10. Hãy làm sao để mỗi lần gọi hàm giảm số này đi 1 và in ra console số đã giảm.

Hãy sửa đổi bài toán trước đó sao cho việc đếm ngược đạt đến 0, sau đó mỗi lần gọi hàm tiếp theo in ra console thông báo rằng việc đếm ngược đã kết thúc.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối