当使用var = this时,它是复制还是引用?

Ada*_*Lee 0 javascript

当我们使用时var that = this,是复制还是引用.它看起来像是this一个特殊的对象,所以that应该参考一下.那意味着什么时候this改变,that还应该改变?显然不是这样,因为that保持不变.

有人可以为此澄清一下吗?为什么var that = this是一种"价值复制"?

T.J*_*der 6

它将一个称为对象引用的值复制this到变量中that.并不是它是一个特殊的对象,这就是JavaScript中引用所有对象的方式(包括数组和函数):存储在变量(参数,属性等)中的是内存中其他对象的引用,而不是副本对象.

说你有这个:

var a = {
    answer: 42
}; 
Run Code Online (Sandbox Code Playgroud)

这会创建一个新对象并存储引用a.在记忆中你有类似的东西:

                +????????????+
a:Ref3554??????>|  (object)  |
                +????????????+
                | answer: 42 |
                +????????????+

在那里,我使用Ref3554来表示参考值,但这纯粹是概念性的; 你永远不会看到代码中的实际值.

当你这样做:

var b = a;  // Copies the value 
Run Code Online (Sandbox Code Playgroud)

它将a(引用)中的值复制到b:

a:Ref3554???+
            |   +????????????+
            +??>|  (object)  |
            |   +????????????+
b:Ref3554???+   | answer: 42 |
                +????????????+

在你的例子中它是相同thisa,that而不是代替而不是代替b.

那意味着什么时候this改变,that还应该改变?

this不能在范围内改变.但是a可以,让我们继续a.假设我这样做:

a = {
    question: "Life, the Universe, and Everything!"
};
Run Code Online (Sandbox Code Playgroud)

我创建了一个新对象并将其分配给a.怎么了b

什么都没有:

                +???????????????+
a:Ref4269??????+|   (object)    |
                +???????????????+
                | question: ... |
                +???????????????+

                +????????????+
b:Ref3554??????>|  (object)  |
                +????????????+
                | answer: 42 |
                +????????????+

请注意如何a获得新的参考(Ref4269).这对任何事都没有影响b.ab以任何方式不链接(也不是thisthat在你的例子).它们恰好包含了相同的值一段时间,然后(如上所述),它们不再存在,因为其中一个被改变了.

但让我们回到他们都指向同一件事的时候:

var a = {
    answer: 42
};
var b = a;
Run Code Online (Sandbox Code Playgroud)
a:Ref3554???+
            |   +????????????+
            +??>|  (object)  |
            |   +????????????+
b:Ref3554???+   | answer: 42 |
                +????????????+

假设我改变了对象的状态ab引用了?

a.answer = 27;
Run Code Online (Sandbox Code Playgroud)

怎么了b?好吧,b没有改变,但是它所指向的对象是指向的对象a,并且该对象的状态刚刚被更改,因此无论您使用哪个变量来访问该对象,您都会看到新的状态:

a:Ref3554???+
            |   +????????????+
            +??>|  (object)  |
            |   +????????????+
b:Ref3554???+   | answer: 27 |
                +????????????+