为什么 JavaScript 产生 "this" 输出?
Why is JavaScript producing "this" output?
我已经使用 JavaScript 一段时间了,但是这段代码让我有些困惑。
为什么这是下面这段代码的输出
length = 10;
function func() {
console.log(this.length);
}
var obj = {
length: 5,
thisFunc: function(func) {
func();
arguments[0]();
}
};
obj.thisFunc(func, 3);
生产
10
2
而不是
10
5
或至少
10
10
有人可以向我解释值 2
的来源以及我在这个(没有双关语意的)特定实例中涉及 this
时错过了什么吗?
在第一种情况下,它与在全局范围内的任何地方执行 console.log(this.length)
相同。因此,如您所知,它将是 10。
如评论中所述,arguments
对象是一个类似数组的对象,其长度为 属性。
You can use arguments.length to count how many arguments the function was called with`
在上面的引用中,用调用的部分很重要。
在第二种情况下,函数在 arguments
对象的上下文中是 运行。您知道函数内部 this
的值取决于它的调用方式。这里this
是arguments
对象,长度为2.
length = 10;
function func() {
console.log(this.length);
}
var obj = {
length: 5,
thisFunc: function(func) {
func();
arguments[0]();
console.log(arguments.length);
}
};
obj.thisFunc(func, 3);
console.log(this.length);
我已经使用 JavaScript 一段时间了,但是这段代码让我有些困惑。
为什么这是下面这段代码的输出
length = 10;
function func() {
console.log(this.length);
}
var obj = {
length: 5,
thisFunc: function(func) {
func();
arguments[0]();
}
};
obj.thisFunc(func, 3);
生产
10
2
而不是
10
5
或至少
10
10
有人可以向我解释值 2
的来源以及我在这个(没有双关语意的)特定实例中涉及 this
时错过了什么吗?
在第一种情况下,它与在全局范围内的任何地方执行 console.log(this.length)
相同。因此,如您所知,它将是 10。
如评论中所述,arguments
对象是一个类似数组的对象,其长度为 属性。
You can use arguments.length to count how many arguments the function was called with`
在上面的引用中,用调用的部分很重要。
在第二种情况下,函数在 arguments
对象的上下文中是 运行。您知道函数内部 this
的值取决于它的调用方式。这里this
是arguments
对象,长度为2.
length = 10;
function func() {
console.log(this.length);
}
var obj = {
length: 5,
thisFunc: function(func) {
func();
arguments[0]();
console.log(arguments.length);
}
};
obj.thisFunc(func, 3);
console.log(this.length);