apply 与 this 指向问题

this作为apply()第一个参数

1
2
3
4
5
6
7
8
9
var x = 0;
function test(){
alert(this.x)
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); // 0
o.m.apply(o); //1;

详细解释

1.当apply中第一个参数不传时,即相当于第一个参数是null/undefined,此时函数内的this指向的是全局变量global(如果是浏览器,那就是指向window对象),所以打印的是全局变量x的值0。

2.当第一个参数传 o 时,函数内的 this 指向的是 o 对象,o 对象有声明 x 属性为 1,所以返回的值为 1。