闭包的问题,为什么两个函数返回结果不想等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <!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,因此执行的是
1 2 3 | function b(str) { console.log(str+ ':' +n); } |
即999
但是当你调用var test2 = a(); nAdd();的时候,相当于将nAdd();赋给a(),即调用的函数是
1 2 3 | nAdd = function () { n = n + 1; } |
有因为声明了 var n = 999; 那么n = n + 1;之后就是1000
希望可以帮到你~
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧