我遇到了一个Javascript示例,但对理由不太满意,或者对this
内部函数的范围感到困惑。请参阅以下示例:
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);
第一次记录10
,这是可以理解的,因为它是从全局范围调用的。但是第二次记录2
会让我感到困惑。我寻找答案,这就是我得到的 -
我们知道我们可以在JavaScript中访问任意数量的参数 函数使用arguments [] array。
因此,arguments0只是调用fn()。在fn里面,现在, 此函数的范围成为arguments数组,并记录 参数长度[]将返回2
有人对此有更好的答案吗?
答案 0 :(得分:0)
您致电arguments[0]();
this
的值因此与arguments
相同。
参数是:fn, 1
其中有2个。
因此,{p>arguments.length
为2
。
答案 1 :(得分:0)
参数是类似数组的对象。调用arguments[0]()
时,返回this.length的函数位于类似数组的arguments对象中。在这种情况下,关键字 this 表示参数对象。
arguments: [function fn() { return this.length; }, 1]
arguments[0](); // returns 2;
以下是另一个例子来说明我的观点:
const arr = [1, 2, function() { return this.length }];
console.log(arr[2]()); // 3
数组中的第三项是一个函数,该函数在被调用时将返回数组的长度。这类似于编写arr.length。