⊗jsPmClLEA 261 of 505 menu

Ứng dụng Môi trường từ vựng của Hàm trong JavaScript

Giả sử chúng ta có một hàm, kết quả của nó trả về một hàm khác:

function test() { return function() { } }

Nếu hàm cha có bất kỳ biến nào, thì các biến đó sẽ được chứa trong môi trường từ vựng của hàm được trả về:

function test() { let num = 1; // biến của hàm cha return function() { // môi trường từ vựng = {num: 1} } }

Hãy viết trong mã của hàm được trả về của chúng ta console.log, in ra giá trị của biến num:

function test() { let num = 1; return function() { console.log(num); } }

Bây giờ hãy gọi hàm cha test và ghi kết quả làm việc của nó vào biến func:

function test() { let num = 1; return function() { console.log(num); } } let func = test();

Vào biến func sẽ ghi lại hàm được trả về. Hãy gọi hàm của chúng ta - kết quả của nó sẽ in ra nội dung của biến num:

function test() { let num = 1; return function() { console.log(num); } } let func = test(); func(); // sẽ in ra 1

Nếu chỉ đơn giản cố gắng truy cập biến num bên ngoài hàm - nó sẽ không khả dụng:

function test() { let num = 1; return function() { console.log(num); } } console.log(num); // biến num ở đây không khả dụng

Như bạn thấy, biến cục bộ num đã liên kết với môi trường từ vựng của hàm chúng ta và bây giờ, bằng cách gọi hàm này ở bất kỳ đâu trong mã, chúng ta có thể lấy được giá trị của biến num, ngay cả khi ở nơi gọi, bản thân biến này không khả dụng.

Thực tế, có thể đạt được kết quả tương tự bằng cách biến biến num thành toàn cục:

function test() { return function() { console.log(num); } } let num = 1; // biến toàn cục let func = test(); func(); // sẽ in ra 1

Tuy nhiên, ở đây sẽ có một sự khác biệt đáng kể: trong phiên bản mới, biến num có thể được thay đổi bên ngoài các hàm (vì nó là toàn cục), còn trong phiên bản cũ - thì không.

Xác định, mà không chạy mã, điều gì sẽ được in ra console:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } let func = test(); console.log(func());

Xác định, mà không chạy mã, điều gì sẽ được in ra console:

function test() { let num1 = 1; let num2 = 2; return function() { return num1 + num2; } } console.log(test()());

Xác định, mà không chạy mã, điều gì sẽ được in ra console:

function test() { let num1 = 1; return function() { return num1 + num2; } } let num2 = 2; let func = test(); console.log(func());

Xác định, mà không chạy mã, điều gì sẽ được in ra console:

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