📜  如何在 JavaScript 中创建私有变量?(1)

📅  最后修改于: 2023-12-03 15:08:39.038000             🧑  作者: Mango

如何在 JavaScript 中创建私有变量?

在 JavaScript 中,我们可以使用闭包、工厂函数或者 ES6 中的类来创建私有变量。

使用闭包
function counter() {
  let count = 0; // 私有变量

  function increment() {
    count++;
    console.log(count);
  }

  function decrement() {
    count--;
    console.log(count);
  }

  return {
    increment,
    decrement
  };
}

const myCounter = counter();
myCounter.increment(); // 1
myCounter.increment(); // 2
myCounter.decrement(); // 1

在这个例子中,count 是一个私有变量,只能被 increment()decrement() 这两个函数访问。而 counter() 函数直接返回了一个包含 increment()decrement() 函数的对象,这些函数在闭包中访问了 counter() 函数中的 count 变量。

使用工厂函数
function createPerson(name) {
  let age = 0; // 私有变量

  function getName() {
    return name;
  }

  function getAge() {
    return age;
  }

  function increaseAge() {
    age++;
  }

  return {
    getName,
    getAge,
    increaseAge
  };
}

const person = createPerson('John');
console.log(person.getName()); // "John"
console.log(person.getAge()); // 0
person.increaseAge();
console.log(person.getAge()); // 1

在这个例子中,每个 createPerson() 函数都包含一个私有变量 age,以及一些访问和修改这个变量的函数。每次调用 createPerson() 都会创建一个新的私有作用域和新的私有变量。

使用 ES6 的 class
class MyCounter {
  #count = 0; // 私有变量

  increment() {
    this.#count++;
    console.log(this.#count);
  }

  decrement() {
    this.#count--;
    console.log(this.#count);
  }
}

const myCounter = new MyCounter();
myCounter.increment(); // 1
myCounter.increment(); // 2
myCounter.decrement(); // 1

在这个例子中,使用了一个 class 来创建一个计数器。计数器中使用了一个私有变量 #count,可以在类的内部使用,但是无法从外部访问。注意,这里使用了私有字段语法 #count,需要在 JavaScript 中使用支持此特性的运行环境。