如果删除“var”,浏览器(Chrome)会抱怨:“someVar未定义”
var someVar = someVar || {};
据我所知,只有在我没有初始化变量时才会抱怨。
答案 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
时,它已经被声明。