这种样式的变量赋值方式如何(位于对象内部,因此“ this”变量引用所述对象):
var prop = this.properties;
var properties = this.properties;
有什么不同吗?
var prop = properties = this.properties;
当我更改为后者时,会引起问题。是引用问题吗?
答案 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
(或let
或const
)中的初始化程序是按照源代码的顺序从左到右执行的,因此{{1} }在prop = this.properties
之前发生。
旁注:properties = prop
不应在新代码中使用,请使用var
或let
。 (如果必须支持过时的JavaScript引擎,则可以将现代代码转换为ES5。)