📅  最后修改于: 2023-12-03 15:08:39.038000             🧑  作者: Mango
在 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()
都会创建一个新的私有作用域和新的私有变量。
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 中使用支持此特性的运行环境。