Skip to content

Day7:写出执行结果,并解释原因 #43

@Genzhen

Description

@Genzhen
Collaborator
var fullname = 'a';
var obj = {
   fullname: 'b',
   prop: {
      fullname: 'c',
      getFullname: function() {
         return this.fullname;
      }
   }
};
 
console.log(obj.prop.getFullname()); // c
var test = obj.prop.getFullname;
console.log(test());  // a

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

Activity

Genzhen

Genzhen commented on Jun 22, 2020

@Genzhen
CollaboratorAuthor

答案
c a

解析

  • 原因在于this指向的是函数的执行环境,this取决于其被谁调用了,而不是被谁定义了。
  • 对第一个console.log()语句而言,getFullName()是作为obj.prop对象的一个方法被调用的,因此此时的执行环境应该是这个对象。另一方面,但getFullName()被分配给test变量时,此时的执行环境变成全局对象(window),原因是test是在全局作用域中定义的。因此,此时的this指向的是全局作用域的fullname变量,即a。
yaooooooooo

yaooooooooo commented on Jul 21, 2020

@yaooooooooo

?????答不对题啊........

Genzhen

Genzhen commented on Jul 22, 2020

@Genzhen
CollaboratorAuthor

?????答不对题啊........

@yaooooooooo 改过来了哈,感谢指正

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @Genzhen@yaooooooooo

        Issue actions

          Day7:写出执行结果,并解释原因 · Issue #43 · lgwebdream/FE-Interview