this指向问题--------笔试趣题

来源:互联网 发布:倒卖数据什么罪 编辑:程序博客网 时间:2024/06/05 05:54
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。



0 0