为什么JavaScript变量中填充了';这';更改时间';这';变化?

为什么JavaScript变量中填充了';这';更改时间';这';变化?,javascript,variables,this,Javascript,Variables,This,为什么self的行为不像一个普通的var?这是因为这个始终是一个对象,而不是一个原语 将包含(或更准确地说是“指向”)对象的变量指定给新变量时,两个变量都指向同一个对象-即“通过引用复制”。对该对象内容的更改将通过这两个变量可见 将包含基元的变量指定给新变量时,将该值的副本指定给新变量。对原始变量的更改不会影响新变量。这里的self没有什么特别之处。请尝试使用任意两个变量名。这就是大多数现代语言的工作原理 function Class () { var self = this; this.hi

为什么self的行为不像一个普通的var?

这是因为
这个
始终是一个对象,而不是一个原语

将包含(或更准确地说是“指向”)对象的变量指定给新变量时,两个变量都指向同一个对象-即“通过引用复制”。对该对象内容的更改将通过这两个变量可见


将包含基元的变量指定给新变量时,将该值的副本指定给新变量。对原始变量的更改不会影响新变量。

这里的
self
没有什么特别之处。请尝试使用任意两个变量名。这就是大多数现代语言的工作原理

function Class () {

var self = this;
this.hi = true; // this { hi: true }, self { hi: true }
self.hi = false; // this { hi: false }, self { hi: false }

}
因此,这里要认识到的关键是两个变量都引用同一个对象

请注意,如果您想在类似这样的情况下“按值复制”(复制对象),您确实有选项。有些库(如和)具有
clone
方法,可用于创建新对象并使用与另一个对象相同的所有属性填充该对象:

var x = {};
var y = x;

x.hi = true; // x { hi: true }, y { hi: true }
y.hi = false; // x { hi: false }, y { hi: false 

因为它们是指针。。指向同一个objectIt的行为与普通变量Object reference 101类似<代码>变量x={};变量y=x;y、 z=“1”;警报(x.z)这个有一些特别之处-它是一个对象,而不是一个原语。我说的是自我(我指的是“自我”)没有什么特别之处。显然你是对的,对象不同于所谓的“原语”;但是OP没有机会被这种方式弄糊涂,因为你不能从一开始就变异原语。答案很好,我不知道这个区别。
var y = _.clone(x);