闭包的问题,为什么两个函数返回结果不想等
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>闭包</title>
</head>
<body>
<script>
function a() {
var n = 999;
nAdd = function() {
n = n + 1;
}
function b(str) {
console.log(str+':'+n);
}
return b;
}
var test1 = a();
var test2 = a();
nAdd();
test1('test1'); // 999
test2('test2'); //1000
</script>
</body>
</html>为什么不是两个都1000,
13
收起
正在回答 回答被采纳积分+1
2回答
樱桃小胖子
2018-04-08 17:48:40
这是因为当你调用var test1 = a();的时候,相当于调用的是var test1 = b();因为function a() {}这个函数实际上是 return b;返回的是b,因此执行的是
function b(str) {
console.log(str+':'+n);
}即999
但是当你调用var test2 = a(); nAdd();的时候,相当于将nAdd();赋给a(),即调用的函数是
nAdd = function() {
n = n + 1;
}有因为声明了 var n = 999; 那么n = n + 1;之后就是1000
希望可以帮到你~
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星