今天遇到一道筆試題
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
/*
第一個(gè) fn this指向window 輸出10
第二個(gè) arguments[0]() 可以理解為arguments.0() [只是方便理解] ,
即argument對(duì)象調(diào)用fn函數(shù),所以this指向arguments對(duì)象
arguments = {
0:fn, //function fn(){console.log(this.length);}
1:第二個(gè)參數(shù) 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
/*
第一個(gè) fn this指向window 輸出10
第二個(gè) arguments[0]() this指向arguments
arguments = {
0:obj1.method, //function(){console.log(this.len);}
1:obj2.method,
length:2
}
arguments沒有l(wèi)en屬性,所以為undefined
*/