繁体   English   中英

为什么在第二个 fn 函数调用期间输出为 2?

[英]Why the output is 2 during second fn function call?

我遇到了一个 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被记录,这让我很困惑。 我在寻找答案,这就是我得到的——

我们知道我们可以使用 arguments[] 数组访问 JavaScript 函数中任意数量的参数。

因此,arguments0 只不过是调用 fn()。 现在在 fn 内部,这个函数的作用域变成了 arguments 数组,记录 arguments[] 的长度将返回 2

有没有人对此有更好的答案?

你调用arguments[0]();

因此this的值与arguments相同。

参数是: fn, 1

其中有2个。

因此, arguments.length2

参数是一个类似数组的对象。 当您调用arguments[0]() ,返回 this.length 的函数位于类似数组的参数对象中。 在这种情况下,关键字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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM