var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments0;
}
};
obj.method(fn, 1);
output:
10
2
在程序执行时,使用了obj.method方法,这时候this指向了obj,但是在真正执行 fn函数体时,也就是fn()执行的时候,this指向了window,所以第一个结果是10
为什么第二次执行arguments0的结果是2?
分析下在obj.method(fn, 1)执行时,经历了什么:首先两个参数fn和1会被放入arguments中,在arguments中第一个参数就是我们传入的函数,接下来fn()执行,此时的this没有绑定因此指向window,输出10,到了arguments0这一句,相当于把arguments[0]中的第一个参数拿来执行,效果如下:
arguments0 //执行,等同于下m面
arguments.0() //当然这句话是不合法的,但是这样我们可以更清楚知道,this是指向arguments实例本身
arguments.length就是它本身的长度,因此输出2
var length = 10;
function fn() {
console.log(this.length); //3
}
var arr = [fn,12,13]
arr0
//同上
网友评论