Javascript 为什么条件变量初始化需要;var";?
如果我删除“var”,浏览器(Chrome)会抱怨:“someVar未定义” 据我所知,只有当我没有初始化变量时,它才会抱怨 据我所知,只有当我没有初始化变量时,它才会抱怨 但是您正在尝试读取一个未声明的变量。给定Javascript 为什么条件变量初始化需要;var";?,javascript,Javascript,如果我删除“var”,浏览器(Chrome)会抱怨:“someVar未定义” 据我所知,只有当我没有初始化变量时,它才会抱怨 据我所知,只有当我没有初始化变量时,它才会抱怨 但是您正在尝试读取一个未声明的变量。给定 someVar = someVar || {}; 它首先计算someVar | |{},并在此过程中尝试获取someVar的值。由于someVar还不存在,因此会出现一个引用错误 下面是一个不会引发错误的示例: someVar = true || someVar; 因为|会计算第
someVar = someVar || {};
它首先计算someVar | |{}
,并在此过程中尝试获取someVar
的值。由于someVar
还不存在,因此会出现一个引用错误
下面是一个不会引发错误的示例:
someVar = true || someVar;
因为|
会计算第二个操作数,因此不会抛出错误
为什么它与var
一起工作?
您可能认为使用var
关键字不会有什么不同,因为someVar | |{}
仍然是首先计算的。但是,由于,
var someVar = someVar || {};
实际评估为
var someVar;
someVar = someVar || {};
因此,在读取someVar
时,它已经被声明了
据我所知,只有当我没有初始化变量时,它才会抱怨
但是您正在尝试读取一个未声明的变量。给定
someVar = someVar || {};
它首先计算someVar | |{}
,并在此过程中尝试获取someVar
的值。由于someVar
还不存在,因此会出现一个引用错误
下面是一个不会引发错误的示例:
someVar = true || someVar;
因为|
会计算第二个操作数,因此不会抛出错误
为什么它与var
一起工作?
您可能认为使用var
关键字不会有什么不同,因为someVar | |{}
仍然是首先计算的。但是,由于,
var someVar = someVar || {};
实际评估为
var someVar;
someVar = someVar || {};
因此,在读取
someVar
的那一刻,它已经被声明了。没有var
。。。你没有初始化它。但如果我说“someVar=5;”,我就不需要“var”。这与初始化的条件性质有关吗?这是一个警告,而不是一个错误。正确吗?a=5
不尝试读取a
a=a | | 5
试图读取a
,因此如果它不存在,就会抛出一个错误。@Paddy:它解释了已声明变量和未声明变量之间的差异。访问未声明的变量将引发引用错误。如果没有var
。。。你没有初始化它。但如果我说“someVar=5;”,我就不需要“var”。这与初始化的条件性质有关吗?这是一个警告,而不是一个错误。正确吗?a=5
不尝试读取a
a=a | | 5
试图读取a
,因此如果它不存在,就会抛出一个错误。@Paddy:它解释了已声明变量和未声明变量之间的差异。访问一个未声明的变量将抛出一个引用错误。因此,我对提升问题感到困惑,这个链接以更普通的方式讨论了这个概念:因此,我对提升问题感到困惑,这个链接以更普通的方式讨论了这个概念: