为什么这种变量分配方法会引起问题?

时间:2020-08-29 10:30:48

标签: javascript variables reference

这种样式的变量赋值方式如何(位于对象内部,因此“ this”变量引用所述对象):

var prop       = this.properties;
var properties = this.properties;

有什么不同吗?

var prop = properties = this.properties;

当我更改为后者时,会引起问题。是引用问题吗?

1 个答案:

答案 0 :(得分:4)

区别在于,与第二个变量不同,您尝试分配给一个尚未声明的properties变量。 var仅适用于prop,而不适用于properties,因为properties位于=之后prop的右侧,因此prop的初始化程序的一部分。分组方式如下:

var prop = (properties = this.properties);
//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^−−−− initializer for `prop`

在宽松模式下,这意味着您正在沦为我所谓的The Horror of Implicit Globals的牺牲品-它创建了一个名为properties global 。在strict mode中,分配给未声明的标识符是它本应一直存在的错误。 (所有新代码都应使用严格模式编写。)

您可以使用var等声明多个变量,但是不能使用相同的值源(不重复)将所有变量分配给它们。

您可以这样做:

var prop, properties;
prop = properties = this.properties;

如果您喜欢。或者:

var prop = this.properties, properties = prop;

之所以可行,是因为具有多个声明的var(或letconst)中的初始化程序是按照源代码的顺序从左到右执行的,因此{{1} }在prop = this.properties之前发生。


旁注:properties = prop不应在新代码中使用,请使用varlet。 (如果必须支持过时的JavaScript引擎,则可以将现代代码转换为ES5。)