关于js闭包的一个测试
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function() {
return function() {
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
如上,为何输出结果是The Window
, 这不是一个闭包吗?按理说this.name应该返回父层的name属性,也就是My Object
值才对啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
简单说:匿名函数中的this指向全局(window)。以下情况除外:
1、使用es6中的箭头函数。箭头函数会锁住定义时的作用域。
2、使用call或apply调用并更改了函数作用域。
在你的例子里obj.getNameFunc返回的就是个匿名函数。
你这是
this
的问题,看这篇文章可以解决掉。要改成闭包问题
这应该算是this指向的问题,和闭包关系不大,如果你想出现
My Object
,你可以这样:将这个this指向改变之后再执行,objA执行的时候,它的this指向的是object,所以objA()是
My Object
。