在javascript闭包中为什么this.name打印出来的是this.window的呢?求解释?
在javascript闭包中为什么this.name
打印出来的是this.window
的呢?求解释?
求大神们解答~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在javascript闭包中为什么this.name
打印出来的是this.window
的呢?求解释?
求大神们解答~
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
你预期的代码其实是这样的:
在全局环境下,this指向的是
windows
(浏览器)。在函数中,this指向的对象在于这个函数是怎么调用的。调用方式1:
在这种情况下,this默认是windows,这种调用方式相当于
windows.foo()
。在严格模式下,上面的调用方式,this应该是undefined。调用方式2:
在这种情况下,this是对象b。
第三种情况:
b.foo()
调用后,在foo函数内,this已经被赋值了,this引向的对象是b
。所以在函数而在你的代码中,你的代码虽然有闭包,但是没啥用。你想在闭包里引用外面的bar
中,输出的this
是b
。name
变量,正确的做法就是在闭包里,保存一个对象的引用,而这个name
变量就在这个变量引用上。你可以用var self = this
来保存这个对象的引用。虽然这个匿名函数是在外面调用(这也是闭包形成的原因),但是它依然能通过它的闭包来访问那个self
变量。