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

关于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.

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题