Javascript: Scope trong javascript hoạt động thế nào? – Thau Nguyen

Ngày xửa ngày xưa, trong một ngôn ngữ nọ có một khái niệm là scope. Nó được dùng để kiểm soát tầm hoạt động của những biến. Khi web ngày một thịnh thành và điều kỳ diệu đã bắt đầu từ năm 2009 khi mà chuẩn ES5 ra đời. Ngôn ngữ scripting chạy trên browser thần thánh đó là Javascript.

var a = 1;
function b(value) {
  a = 2;
  var sum = a + value;
  return sum;
}
console.log(b(10));
console.log(a);

Bạn hãy trả lời output của đoạn code trên là gì nhé? Bamm! In ra 12 và 2.

Bạn đã từng nghe đến var là function scope thế cái éo gì mà function b lại truy cập được biến a. Và nó còn thay đổi giá trị của một biến ngoài function nó. Bạn có thể xem giải thích tại sao biến a được truy xuất ngoài function và những biến thể của nó tại đây.

Một ví dụ khác về scoping:

var a = 1;
function b() {
  a = 10;
  return;
  function a() {}
}
b();
console.log(a);

Output ở đây sẽ là: 1. What the hell? Trong trường hợp này biến a ở global được giữ nguyện giá trị? Tại sao?

Bạn thấy đấy việc quản lí scope trong Javascript rất khó để reason about cái biến đó. Khi mà chúng ta có qúa nhiều nguồn thay đổi khác nhau cho một biến. Bạn nên hạn chế dùng global variable và dùng “use strict” để catch được những loại dùng sai scope trong Javascript nhé.

Bạn có thể liên tưởng scope trong Javascript cũng giống như cách quản lí địa phận hành chính. Ví dụ như:

Global Scope là những qui định cấp quốc gia(Việt Nam)

Function Scope là những qui định cấp tỉnh, thành phố (Hồ Chí Minh)

Block Scope là những qui định ở mức quận(Tân Bình)

Đối với liên tưởng này, khi bạn sống trong một thành phố thì mặc định phải phải tuân thủ nguyên tắc của quốc gia(Việt Nam). Vì những qui định Global sẽ ảnh hưởng nên toàn lãnh thổ Việt Nam(tất cả những tỉnh thành-function scope, quận huyện-block scope)