今天遇到一道笔试题
var length = 10;
function fn(){
console.log(this.length);
}
var obj = {
length:5,
methods:function(fn){
fn();
arguments[0]();
}
};
obj.methods(fn, 1); // 10 2
/*
第一个 fn this指向window 输出10
第二个 arguments[0]() 可以理解为arguments.0() [只是方便理解] ,
即argument对象调用fn函数,所以this指向arguments对象
arguments = {
0:fn, //function fn(){console.log(this.length);}
1:第二个参数 1,
length:2
}
*/
延伸:
var len = 10;
var obj1 = {
len:6,
method:function(){
console.log(this.len);
}
};
var obj2 = {
len:5,
method:function(fn){
fn();
arguments[0]();
}
};
obj2.method(obj1.method,obj2.method); // 10 undefined
/*
第一个 fn this指向window 输出10
第二个 arguments[0]() this指向arguments
arguments = {
0:obj1.method, //function(){console.log(this.len);}
1:obj2.method,
length:2
}
arguments没有len属性,所以为undefined
*/