闭包就是一个 函数 和与其相关的引用环境组合的一个整体。
在 JavaScript 中闭包是引用了 自由变量 的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。
闭包(Closure)在某些编程语言中也被称为 Lambda 表达式。
在 JavaScript 中,被捕获到闭包中的变量让闭包本身拥有了记忆效应,闭包中的逻辑可以修改闭包捕获的变量,变量会跟随闭包生命期一直存在,闭包本身就如同变量一样拥有了记忆功能。
JavaScript闭包记忆效应,实现累加
<!DOCTYPE html>
<html>
<head>
<title>JavaScript闭包</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
function AddUpper(){
var n = 20;
return function(x){
n = n + x;
return n;
}
}
var f = AddUpper();
console.log("闭包返回:", f(1));
console.log("闭包返回:", f(2));
console.log("闭包返回:", f(3));
</script>
</head>
</html>
程序运行后,控制台输出如下:
我们定义了一个 AddUpper 函数,该函数返回的是一个匿名函数,该匿名函数引用到函数外的 n,因此这个匿名函数就和 n 形成了一个整体,构成了闭包。
我们反复调用 f 函数时,因为 n 只初始化一次,因此每调用一次就累计一次。
闭包就是一个函数和与其相关的引用环境组合的一个整体。
在 JavaScript 中,被捕获到闭包中的变量让闭包本身拥有了记忆效应,闭包中的逻辑可以修改闭包捕获的变量,变量会跟随闭包生命期一直存在,闭包本身就如同变量一样拥有了记忆功能。