Truy cập biến ngoại vi của hàm trong JavaScript

Hãy xem xét đoạn mã sau:

javascriptlet num = 1; // gán giá trị cho biến

function func() {
  console.log(num); // in giá trị ra console
}

func(); // gọi hàm

Như tôi đã đề cập trước đây, giá trị của biến không nhất thiết phải nằm trước định nghĩa hàm, điều quan trọng là nó phải đứng trước lời gọi hàm:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

Thực tế thì không hoàn toàn như vậy. Hàm của chúng ta thậm chí đã biết giá trị của biến num trước cả khi được gọi:

javascriptlet num = 1;

function func() {
  console.log(num); // hàm đã biết rằng num = 1
}

Đây là một ví dụ phức tạp hơn:

javascriptlet num = 1; // vào thời điểm này hàm biết rằng num = 1

function func() {
  console.log(num);
}

num = 2; // vào thời điểm này hàm biết rằng num = 2

Thêm các lời gọi hàm:

javascriptlet num = 1; // vào thời điểm này hàm biết rằng num = 1
func(); // sẽ xuất ra 1

function func() {
  console.log(num);
}

func(); // sẽ xuất ra 1
num = 2; // vào thời điểm này hàm biết rằng num = 2
func(); // sẽ xuất ra 2

Một lần nữa: thực tế là hàm biết giá trị của các biến ngoại vi, ngay cả khi nó chưa được gọi.