是梦梦啊 2021-08-23 17:16 采纳率: 60%
浏览 70
已结题

关于this的指向的一道面试题

能解释下为什么吗

var length = 10
function fn() {
    console.log(this.length);
}
 
var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method(fn, 1);//输出是什么?
  • 写回答

1条回答 默认 最新

  • 前端-海鸟 2021-08-23 17:41
    关注

    这道题关键你要知道arguments它是什么,arguments他是一个类数组对象。首先看fn函数里面输出this.length,fn非闭包,这时候this肯定指向全局(this.length就是var length=10;定义的length)。当执行obj.method的方法时先执行fn(),这肯定和在外面执行fn()是一样的,this作用域并未发生变化,所以输出结果是10,然后执行arguments[0],arguments[0]是fn挂载到arguments对象上的函数,这时候this就指向arguments本身,那么调用arguments[0]输出的就是arguments的长度也就是2.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 已采纳回答 8月23日
  • 创建了问题 8月23日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改