是梦梦啊 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日

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示