能解释下为什么吗
var length = 10
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);//输出是什么?
能解释下为什么吗
var length = 10
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);//输出是什么?
这道题关键你要知道arguments它是什么,arguments他是一个类数组对象。首先看fn函数里面输出this.length,fn非闭包,这时候this肯定指向全局(this.length就是var length=10;定义的length)。当执行obj.method的方法时先执行fn(),这肯定和在外面执行fn()是一样的,this作用域并未发生变化,所以输出结果是10,然后执行arguments[0],arguments[0]是fn挂载到arguments对象上的函数,这时候this就指向arguments本身,那么调用arguments[0]输出的就是arguments的长度也就是2.