1 var length = 10 2 function fn(){ 3 alert(this.length) 4 } 5 var obj = { 6 length: 5, 7 method: function(fn) { 8 fn() 9 arguments[0]() 10 } 11 } 12 obj.method(fn)打印结果为 10,1 对于第一个结果,传递整个fn函数进去,其this指向为window,所以打印出来的参数为10; 对于第二个结果,我们再看arguments[0]() ,不能被这个写法迷惑,在明白arguments对象的意思后(如果不明白可以看我上一篇随笔),可以发现原来的arguments[0]指的就是fn,所以arguments[0]()就变成了fn(),想当然的以为是10,但是这里的的this指的已经不是window了而是arguments对象, arguments[0]实际上为对象.属性,是对象在调用自己的属性方法,这里的this为arguments对象,所以打印结果变为了1
this指向问题探究
今天看到了一个关于this指向的面试题,在这里记录下,题如下