为什么条件变量初始化需要" var"?

时间:2014-12-10 15:47:56

标签: javascript

如果删除“var”,浏览器(Chrome)会抱怨:“someVar未定义”

var someVar = someVar || {};

据我所知,只有在我没有初始化变量时才会抱怨。

1 个答案:

答案 0 :(得分:4)

  

据我所知,只有在我没有初始化变量时才会抱怨。

但是 试图读取未声明的变量。给定

someVar = someVar || {};

首先评估someVar || {}并尝试在此过程中获取someVar的值。由于someVar尚未存在,因此您会收到参考错误。

这是一个不会引发错误的示例:

someVar = true || someVar;

因为||执行shirt-circuiting evaluation,所以永远不会计算第二个操作数,因此不会抛出任何错误。

为什么它适用于var呢?

您可能认为使用var关键字不会产生影响,因为someVar || {}仍会先评估。但是,由于hoisting,声明

var someVar = someVar || {};

实际上被评估为

var someVar;
someVar = someVar || {};

因此,在读取someVar时,它已经被声明。