如何解决为什么这种变量分配方法会引起问题?
这种样式的变量赋值方式如何(位于对象内部,因此“ this”变量引用所述对象):
var prop = this.properties;
var properties = this.properties;
有什么不同吗?
var prop = properties = this.properties;
当我更改为后者时,会引起问题。是引用问题吗?
解决方法
区别在于,与第二个变量不同,您尝试分配给一个尚未声明的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。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。