JS闭包实例汇总
在 JavaScript 中,函数是一等公民,它们可以被传递、被赋值、被嵌套定义等等。在函数内定义的函数,被称为闭包(Closure)。闭包可以访问函数外部的变量,而且在函数执行完并返回时,可以保留这些变量的值。
本文将为大家汇总几个 JavaScript 闭包的实例,方便大家加深对闭包的理解。
示例一:计数器
我们可以通过闭包来创建一个计数器,实现每次调用函数计数器加1的效果。代码如下:
function counter() {
let count = 0;
return function() {
count++;
console.log(count);
};
}
const count1 = counter();
const count2 = counter();
count1();
count1();
// 输出:1, 2
count2();
// 输出:1
代码中的 counter
函数返回了一个内部定义的匿名函数,这个匿名函数引用了 counter
函数中的 count
变量。每次调用 counter
函数,都会创建一个新的闭包,因此 count
变量可以被独立地存储在不同闭包中。所以 count1
和 count2
的调用是互不影响的。
示例二:模拟私有变量
在 JavaScript 中,并没有类似 Java 或 C++ 中的私有变量的概念,但是,通过闭包来实现封装变量的访问权限,可以达到类似的效果。代码如下:
function person(name) {
let _age = 16;
return {
getName() {
return name;
},
getAge() {
return _age;
},
setAge(age) {
if (age > 0 && age < 150) {
_age = age;
}
},
};
}
const xiaoming = person('小明');
console.log(xiaoming.getName()); // 输出:小明
console.log(xiaoming.getAge()); // 输出:16
xiaoming.setAge(18);
console.log(xiaoming.getAge()); // 输出:18
在 person
函数中定义了一个私有变量 _age
,并通过返回的匿名函数暴露了两个公共方法 getAge
和 setAge
,这两个方法暴露出来的 _age
变量,即可达到封装变量的效果。
结语
以上是两个实例,可以看到,闭包是 JavaScript 中十分重要的一个概念,通过闭包,可以实现很多有意思的功能,比如模拟私有变量,还可以实现一些高级的设计模式,比如单例模式、工厂模式等等。希望本文能够对大家了解闭包有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js闭包实例汇总 - Python技术站