关于闭包的一个面试题, 这是为什么啊

2020-05-07 10:51:59 +08:00
 lukeshawn

function fun(n,o){ console.log(o); return { fun: function(m){ return fun(m,n); } }; }

var a = fun(0); // undefined , 这个我理解 a.fun(1); // 0, 这是为什么啊

为什么 a.fun(1)是 0 啊

1758 次点击
所在节点    问与答
7 条回复
yesterdaysun
2020-05-07 10:56:56 +08:00
因为最开始穿进去的 0, 作为 n, 在 a.fun 的调用中, 又被传到外面的 fun 作为 o 了
shintendo
2020-05-07 11:04:42 +08:00
a = fun(0) // a == {fun: function(m) {return fun(m,0)}}
这样看能理解吗?
lukeshawn
2020-05-07 11:16:16 +08:00
@yesterdaysun 听不懂
lukeshawn
2020-05-07 11:20:11 +08:00
@shintendo 不理解,有更小白的解释么
rming
2020-05-07 11:22:32 +08:00
shintendo
2020-05-07 11:24:30 +08:00
@lukeshawn ??不理解在哪里
1. fun(n)的返回值是{ fun: function(m){ return fun(m,n); } }
2. 所以 fun(10086)的返回值是{ fun: function(m){ return fun(m,10086); } }
3. 同理 fun(0)的返回值是{ fun: function(m){ return fun(m,0); } }
4. a = fun(0),所以 a = { fun: function(m){ return fun(m,0); } }
哪步不理解??
MisakaTang
2020-05-07 11:33:38 +08:00
console.log(o) 打印函数的第二个参数
var a = fun(0); 使得函数的第二个参数变成了 0
a.fun() 不管传什么都是打印 0
简单理解就是 var a = fun(0) 把 fun(n,o)的第二个参数持久化了 后面调用 a.fun(n) 等价于调用 fun(n,0)
这样解释?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX