Closure là một chức năng có quyền truy cập vào phạm vi cha, ngay cả sau khi scope đã đóng.

function speak() {
  var words = 'hi';
  return function logIt() {
    console.log(words);
  }
}

Function speak sẽ return ra một function khác có tên là logIt().

var sayHello = speak();
sayHello;
//  function logIt() {
//    console.log(words);
//  }

Khi gọi mỗi giá trị sayHello thì nó sẽ trả về hàm bên trong. Nhưng nếu chúng ta gọi sayHello() thì nó sẽ in ra giá trị bên trong hàm.

sayHello();
ouput: 
'hi'

Chúng ta có thể thấy biến words có thể được truy cập từ function logIt().

Sử dụng closure để xác định các biến private

Nói chung, các nhà phát triển JavaScript sử dụng dấu gạch dưới (_) làm tiền tố cho các biến private. Nhưng trên thực tế, các biến này vẫn có thể được truy cập và sửa đổi, không phải là biến private. Tại thời điểm này, việc sử dụng closure có thể xác định các biến thực sự private, ở đây có một ví dụ có lẽ bạn sẽ cười mỉm và nói rằng, à thì ra là vậy?

function Product() {

    var name;

    this.setName = function(value) {
        name = value;
    };

    this.getName = function() {
        return name;
    };
}

var p = new Product();
p.setName("anonystick.com");

console.log(p.name); // undefined
console.log(p.getName()); // anonystick.com

Leave a Reply

Your email address will not be published. Required fields are marked *