关于 js 函数参数的this

先看一道面试题:

var number = 10;
function fn() {
  console.log(this.number);
}
var obj = {
  number: 2,
  show: function(fn) {
    this.number = 3;
    fn();
    arguments[0]();
  }
};
obj.show(fn);

打印的结果如下:

 

 

 obj.show 中,第一个函数执行 fn() 结果为 10,第二个 arguments[0]() 执行结果为 undefined。

原因是:

第一个 fn 在执行时,this 指向 window,window,number 为10;

第二个 fn 在执行时,实际上为 argements.0 在执行,也就是此时的 this 为 arguments(毕竟 arguments 为伪数组,伪数组也还是对象,可理解为 obj.0)。因为 arguments 的属性中没有 number 这个属性,所以返回 undefined

posted @ 2019-10-31 17:33  沐子馨  阅读(1681)  评论(0编辑  收藏  举报