JS闭包是指一个函数能够访问它的外部函数作用域中定义的变量,即使在外部函数返回之后依然有效。
JS闭包原理
在JavaScript中,函数是一等公民,即函数可以作为参数、可以返回值、可以嵌套在另一个函数中,形成闭包。
当函数内部有东西被引用,这里面所引用的内容会一直存在,不会被垃圾回收器清除,这就形成了闭包。
在函数内部定义一个函数,内部函数可以访问外部函数的变量。当外部函数返回时,内部函数仍然可以访问外部函数的变量,这就是闭包。
JS闭包的应用经典示例
1. 实现私有变量
一个普通的函数,内部定义了一个变量a,外部无法访问a:
function aa() {
var a = 5;
function f() {
return a;
}
}
在上述函数的基础上,定义一个返回函数f的函数,外部可以访问这个闭包函数f,从而访问到a:
function aa() {
var a = 5;
return function f() {
return a;
}
}
在上述代码中,闭包函数f可以访问a,但是a是私有变量,外部不能修改。由于JavaScript没有块级作用域,使用闭包是实现私有变量的常用方法。
2. 缓存运算结果
在一些需要频繁调用的函数中,使用闭包可以减少不必要的重复计算。例如一个计算乘积的函数:
function multiply(x, y) {
return x * y;
}
频繁调用multiply函数,需要不停计算乘积。可以使用闭包缓存上次的计算结果,减少重复计算:
function multiply() {
var cache = {};
return function(x, y) {
var key = x + '*' + y;
if (key in cache) {
return cache[key];
} else {
var result = x * y;
cache[key] = result;
return result;
}
}
}
上述代码中,定义了一个缓存对象cache,使用key记录x和y的值,如果已经有缓存结果,直接返回,否则计算结果并存入缓存。在之后的调用中,如果发现缓存中已经有计算结果,就直接返回缓存结果,避免了重复计算。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS闭包原理与应用经典示例 - Python技术站