&引用;这";函数调用中的javascript
当我调用a()时,我的结果是&引用;这";函数调用中的javascript,javascript,function,this,Javascript,Function,This,当我调用a()时,我的结果是 // Situation 1 var a = function A() { this.x = 1; var b = function B () { this.x = 2; console.log('Method B : x = ' + this.x); }; console.log('Method A : x = ' + this.x); b(); } 但如果我将“this.x=2”删除为
// Situation 1
var a = function A() {
this.x = 1;
var b = function B () {
this.x = 2;
console.log('Method B : x = ' + this.x);
};
console.log('Method A : x = ' + this.x);
b();
}
但如果我将“this.x=2”删除为:
我的结果将是
// Situation 2
var a = function A() {
this.x = 1;
var b = function B () {
console.log('Method B : x = ' + this.x);
};
console.log('Method A : x = ' + this.x);
b();
}
我不明白为什么
- 在情况2中,函数B的“this”是指函数A的“this”
- 在情况1中,当在函数B中分配“this.x=2”时,函数A的“this.x”没有改变
b()
,这将导致在浏览器环境中引用全局对象(窗口
)
这就解释了你的行为,你写的基本上是window.x=1
像您这样调用b()
将导致此
引用全局对象(浏览器环境中的窗口
)
这就解释了你的行为,你写的基本上是window.x=1
因为,这个.x=2
在函数B的定义中,它在调用B之前不会发生,在定义B时不会发生。尝试此版本并查看:
Method A : x = 1
Method B : x = 1
因为,this.x=2
在函数B的定义中,它在调用B之前不会发生,而在定义B时不会发生。尝试此版本并查看:
Method A : x = 1
Method B : x = 1
在a
和b
中更改this.x
的原因是它们都引用了窗口
对象
我认为你对这个有误解调用b
后,正在更改此.x
。我们可以看到这一点,如果我们反向调用:
// Situation 3
var a = function A() {
this.x = 1;
var b = function B () {
this.x = 2;
console.log('Method B : x = ' + this.x);
};
console.log('Method A before B: x = ' + this.x);
b();
console.log('Method A after B: x = ' + this.x);
}
在a
和b
中更改this.x
的原因是它们都引用了窗口
对象
我认为你对这个有误解调用b
后,正在更改此.x
。我们可以看到这一点,如果我们反向调用:
// Situation 3
var a = function A() {
this.x = 1;
var b = function B () {
this.x = 2;
console.log('Method B : x = ' + this.x);
};
console.log('Method A before B: x = ' + this.x);
b();
console.log('Method A after B: x = ' + this.x);
}
直到打印了A的值之后,才调用b()
。因此,x的值为1,然后b将其更改为2
如果在打印a()
之前调用b()
b(); // 2
console.log('Method A : x = ' + this.x); // 2
Asb()
将首先更改值,然后a()
将记录
这就是函数
Method A : x = 2
Method B : x = 2
a和b都引用窗口对象window.x
直到a的值被打印出来之后,您才调用b()
。因此,x的值为1,然后b将其更改为2
如果在打印a()
之前调用b()
b(); // 2
console.log('Method A : x = ' + this.x); // 2
Asb()
将首先更改值,然后a()
将记录
这就是函数
Method A : x = 2
Method B : x = 2
a和b都引用window对象window.x
这是javascript中的一个特殊关键字,它取决于上下文。在您的例子中,函数B()
位于函数A()的上下文中。因此,如果您不在函数B()
中覆盖this.x
,它将是您在函数A()
中指定的值,这是javascript中的一个特殊关键字,它取决于上下文。在您的例子中,函数B()
位于函数A()的上下文中。因此,如果您不在函数B()中覆盖这个.x
,
它将是您在函数A()中指定的值。然后函数A()中的“this”引用对象A,但我不明白为什么“this”引用全局对象?我认为当赋值“var A=函数A()”时,创建函数对象A()。然后函数A()中的“this”引用对象A,但我不明白为什么“this”引用全局对象?