闭包的问题,为什么两个函数返回结果不想等
<!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 星