关于js闭包的一个测试

发布于 2022-09-04 21:11:39 字数 494 浏览 19 评论 0

            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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤独陪着我 2022-09-11 21:11:39

简单说:匿名函数中的this指向全局(window)。以下情况除外:
1、使用es6中的箭头函数。箭头函数会锁住定义时的作用域。
2、使用call或apply调用并更改了函数作用域。
在你的例子里obj.getNameFunc返回的就是个匿名函数。

山田美奈子 2022-09-11 21:11:39

你这是 this 的问题,看这篇文章可以解决掉。

要改成闭包问题

var name = "The Window";  
var object = {    
    name: "My Object",
    getNameFunc: function() {
        var name = "My name";
        return function() {        
            return name;     
        };    
    }
};

alert(object.getNameFunc()()); //The Window
想你只要分分秒秒 2022-09-11 21:11:39

这应该算是this指向的问题,和闭包关系不大,如果你想出现My Object,你可以这样:

    var objA = object.getNameFunc().bind(object);
    alert(objA());

将这个this指向改变之后再执行,objA执行的时候,它的this指向的是object,所以objA()是My Object

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文