JAVASCRIPT CLOSURES.



"Trong javascript, closure là một hàm với những biến là những ngữ cảnh bao quanh có biên giới là những reference."
Closure là một hàm được định nghĩa trong một scope khác được truy cập tất cả các biến trong một outer scope.
1.    Sử dụng closure trong một trạng thái ẩn:
function greeter(name, age) {
  var message = name + ", who is " + age + " years old, says hi!";

  return function greet() {
    console.log(message);
  };
}

// Generate the closure
var bobGreeter = greeter("Bob", 47);

// Use the closure
bobGreeter();

2.    Sử dụng closure thay một object.

Personclass.js

// Define the constructor
function Person(name, age) {

  // Store the message in internal state
  this.message = name + ", who is " + age + " years old, says hi!";

};

// Define a sync method
Person.prototype.greet = function greet() {
  console.log(this.message);
};

// Define a method with async internals
Person.prototype.slowGreet = function slowGreet() {
  var self = this; // Use a closure to preserve `this`
  setTimeout(function () {
    console.log(self.message);
  }, 1000);
};

// Export this file as a module
module.exports = Person;

useclass.js

var Person = require('./personclass');

var bob = new Person("Bob", 47);

bob.greet();

3.    object factories sử dụng closure:

personfactory.js

// Define the factory
function newPerson(name, age) {

  // Store the message in a closure
  var message = name + ", who is " + age + " years old, says hi!";

  return {

    // Define a sync function
    greet: function greet() {
      console.log(message);
    },

    // Define a function with async internals
    slowGreet: function slowGreet() {
      setTimeout(function () {
        console.log(message);
      }, 1000);
    }

  };
}

// Export this file as a module
module.exports = newPerson;

usefactory.js

var newPerson = require('./personfactory');

var tim = newPerson("Tim", 28);

tim.greet();

4.    closure cho sự kiện và callback
settimeout2.js

function setAlarm(message, timeout) {

  // Define handle in the closure
  function handle() {
    console.log(message);
  }

  setTimeout(handle, timeout);
}

setAlarm("Wake UP!", 100);

evenobject.js

var Person = require('./personclass'),
    newPerson = require('./personfactory');

var bob = new Person("Bob", 47);
var jake = new Person("Jake", 17);
var tim = newPerson("Tim", 28);

setTimeout(bob.greet, 100);
// Outputs: undefined

setTimeout(tim.greet, 100);
// Outputs: Tim, who is 28 years old, says hi!

// With `this` based objects you have to manually bind the function
// This works
setTimeout(function () {
  jake.greet();
}, 100);

// Outputs: Jake, who is 17 years old, says hi!

Nhận xét

Bài đăng phổ biến từ blog này

Trang web medium.com chết, vì sao ?

Cách sử dụng sys.argv trong python.

Thiết kế một RESTful API bằng python và flask.