var legth=10;
function fn(){
console.log(this.length);
}
var obj={
length:5,
method:function(fn){
fn();
arguments[0]();
}
};
obj.method(fn,1);
上星期去武大参加的校招,公司是乐其,这里就不说笔试题的难易(yilianmengabc)了,当时上面这道题做的时候没啥感觉,后来是乐其也去了闺蜜她们学校,也给他们这套题,,然后给我看这道题,,,于是才发现当时做题的自己是辣么的单纯无知,看似简单的一道题,其实是个深坑。
这里的obj.method(fn,1);执行时
1.首先会执行method里面的fn();由于fn()是全局函数,this会向上寻找对象,即window对象,所以输出的第一个数是10;
2.然后执行arguments[0]();这里的arguments是js的内置对象,在函数体内可以通过arguments这个对象来访问传进来的参数数组,可以这么说:arguments=[fn,1];
所以arguments[0]();执行时是实际上就是执行fn();这里的fn()执行时会,this向上寻找对象,即arguments,arguments数组长度为2,所以输出的第二个数是2。