Phạm vi JavaScript

Tìm hiểu kiến thức cơ bản về Phạm vi JavaScript

Phạm vi là tập hợp các quy tắc được xác định bằng ngôn ngữ lập trình để xác định giá trị của một biến.

JavaScript sử dụngphạm vi từ vựng, có nghĩa là giá trị của một biến được xác định theo vị trí của nó khi nó được viết. Không phải khi nó được gọi, đó là điều gì đó xảy ra với phương án thay thế,phạm vi động.

Phạm vi là tập hợp các biến hiển thị cho một phần của chương trình.

Chúng tôi có phạm vi toàn cầu, phạm vi khối và phạm vi chức năng. Nếu một biến được định nghĩa bên ngoài một hàm hoặc khối, thì nó được gắn với đối tượng toàn cục và nó có phạm vi toàn cục, có nghĩa là nó có sẵn trong mọi phần của chương trình.

Có một sự khác biệt rất quan trọng giữavar,letconstcác bản kê khai.

Một biến được định nghĩa làvarbên trong một chức năng chỉ hiển thị bên trong chức năng đó. Cũng giống như các tham số của hàm.

Một biến được định nghĩa làconsthoặc làletmặt khác chỉ có thể nhìn thấy bên trong khối đó nơi nó cư trú.

Điều quan trọng là phải hiểu rằng một khối (được xác định bằng một cặp dấu ngoặc nhọn) không xác định phạm vi mới chovar, nhưng nó làm choletconst. Một phạm vi mới chovarchỉ được tạo khi một hàm được tạo, bởi vìvarkhông có phạm vi khối, nhưng phạm vi chức năng.

Bên trong một chức năng, bất kỳvarbiến được định nghĩa trong nó hiển thị trong toàn bộ mã hàm, ngay cả khi biến được khai báo ở cuối hàm, nó vẫn có thể được tham chiếu ở phần đầu, vì JavaScript trước khi thực thi mã.di chuyển tất cả các khai báo biến lên trên cùng(cái gì đó được gọi làcẩu). Để tránh nhầm lẫn, hãy luôn khai báovarcác biến ở đầu một hàm.

Đó là thứ tôi nghĩ. Ngay cả khi bạn tuyên bố mộtvarở cuối một hàm, phần khai báo của nó được chuyển lên đầu:

function run() {
  console.log(`${name}`)
  var name = 'Flavio'
}

run()

Điều này in ra "không xác định", bởi vì những gì thực sự xảy ra là:

function run() {
  var name;
  console.log(`${name}`)
  name = 'Flavio'
}

run()

letconstkhông "chịu đựng" khi cẩu. Nếu bạn sử dụng một trong số chúng trong ví dụ trên, bạn sẽ gặp lỗi:ReferenceError: name is not defined.

Trong JavaScript, các biến của một hàm mẹ cũng được cung cấp cho các hàm bên trong. Phạm vi của một hàm bên trong cũng bao gồm phạm vi của một hàm cha và điều này được gọi là bao đóng (chúng ta sẽ nói kỹ hơn về điều này sau).

Có một điều nhỏ bạn cần phải lưu ý. Trong chế độ không nghiêm ngặt, nếu bạn sử dụng một biến mà không khai báo nó, thì bất cứ khi nào bạn làm điều đó, biến đó sẽ được gắn vào phạm vi toàn cục. Đó có thể là một nguồn lỗi xấu. Vì vậy, hãy đảm bảo rằng bạn luôn khai báo các biến trước khi sử dụng chúng. Chỉ cần lưu ý điều này, nhưng đó chỉ là một lý do khác để sử dụng chế độ nghiêm ngặt theo mặc định, giải quyết vấn đề này. Chúng ta sẽ nói về chế độ nghiêm ngặt sau.

Hãy nhớ rằng: bất kỳ biến nào được xác định trong một hàm (hoặc khối) có cùng tên với biến toàn cục sẽ được ưu tiên hơn biến toàn cục, che khuất nó.

Bản in nàyundefined:

var name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) var name = ‘Flavio’ }

run()

và điều này gây ra lỗiReferenceError: name is not defined:

let name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) let name = ‘Flavio’ }

run()

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: