闭包理解起来总是很别扭,直觉上得到的结果跟实际上的不一样。怎么破。

2015-09-29 09:16:39 +08:00
 jianghu52
<script src="https://gist.github.com/jianghu52/dba55e494395ac26b6ec.js"></script>
object2 那里我就是觉得应该是 the window 。
2489 次点击
所在节点    程序员
3 条回复
cuiweiqiang
2015-09-29 09:33:20 +08:00
这应该不是闭包的问题吧,是 this 的意义不清。一般 this 指向的是调用者,但是在匿名函数中 this 指向的是顶级对象。比如 window, node module 。
joyee
2015-09-29 15:01:59 +08:00
1 楼+1 ,这不是闭包的问题, JS 的闭包里变量都属于 lexical scope 也就是符合你说的“直觉”,但 this 不是 lexical scope 的,有另一套规则。不过如果你用 ES6 的 arrow function 的话 this 就是跟着 lexical scope 走的了 XD
joyee
2015-09-29 15:10:57 +08:00
@cuiweiqiang 不过说匿名函数里 this 指顶级对象也不太对……因为你可以用 bind / call / apply 弄到其他对象上去,或者把它赋值到另一个对象的属性上( obj.method = getFunc())再 obj.method() 这样 this 就变成 obj 了。只有在没有进行这种 binding 的情况下,才会默认指顶级对象。

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

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

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

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

© 2021 V2EX