一个JS闭包问题 | 节流防抖
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>闭包问题</title>
</head>
<body>
<script>
function fn1() {
var a = 2;
function fn2() {
a++
console.log(a)
}
return fn2
}
var f1 = fn1()
f1() //3
f1() //4
var f2 = fn1()
f2() //3
f2() //4
</script>
</body>
</html>
输出结果
3
4
3
4
尚硅谷_JS高级_常见的闭包
问题就是为什么不应该都是输出3,a为什么没有在每次函数调用前被重新赋值?
浅层的理解:
因为return fn2给了f,f没消失,闭包就不会,所以再var一个f,那就会出现两个闭包了。

浙公网安备 33010602011771号