JS中闭包的理解

const secureBooking = function () {
  // 调用这个函数 这个值外部无法访问
  let passengerCount = 0;
  return function () {
    passengerCount++;
    console.log(`${passengerCount} passengers`);
  };
};
// 所以一个函数总是可以访问变量环境 创建它的执行上下文 ,即使执行环境消失之后
// 闭包是封闭变量,闭包使函数可以访问所有变量其父函数,即使父函数已经返回之后,所以函数保持对其外部范围的引用,即使那个外部范围消失之后,这基本上保留了整个范围链
const booker = secureBooking();
booker();
booker();
// 我们不必须手动创建闭包,这是JS完全自动完成,我们不需要做任何事

console.dir(booker);
*/


// 闭包示例1
let f;
const g = function () {
  const a = 23;
  f = function () {
    console.log(a * 2);
  };
};

const h = function () {
  const b = 777;
  f = function () {
    console.log(b * 2);
  };
};

g();
f();
console.dir(f);

// f函数进行了重新分配
// 所以闭包总是确保一个函数不会失去连接,到它诞生地存在的变量
h();
f();
console.dir(f);
// 闭包示例2
const boardPassengers = function (n, wait) {
  const perGroup = n / 3;

  setTimeout(function () {
    console.log(`We are now boarding all ${n} passengers`);
    console.log(`There are 3groups,each with ${perGroup}`);
  }, wait * 1000);

  console.log(`Will start boarding in ${wait} seconds`);
};
// 由此证明  闭包具有优先权
const perGroup = 1000;
boardPassengers(180, 3);

 

posted @ 2022-07-11 20:38  吃惊夜夜  阅读(72)  评论(0)    收藏  举报