为什么在使用短路计算定义变量时必须使用 var 关键字?
这行得通...
var sum=sum||5;
console.log(sum); //shows 5;
这行不通...
sum=sum||5;
console.log(sum); //error sum is not defined;
第二个例子不应该只是在全局范围内而不是局部范围内进行 sum===5 吗?
当你做var sum=sum||5;
时,内部发生的事情是这样的:
- 变量
sum
被定义,它被创建, - 变量
sum
被分配一个undefined
值 - 变量
sum
被赋sum || 5
的结果,这就像说undefined || 5
,这是5
当您简单地执行sum = sum||5
上面的第一步和第二步不会发生时,因此在第三步中,您将根本不存在的东西短路,值为 5
,这就是您出现该错误的原因。
为了更好地理解这一点,请执行以下操作:打开浏览器的控制台并简单地编写sum
。您将收到一个错误,因为sum
不存在。现在,做sum = ''
.这里发生的事情是定义/创建了一个变量sum
,就好像你已经做了var sum
一样,它现在存在,并且它被分配了值 ''
。
您应该了解上述内容的本质是,将价值undefined
与价值5
短路与将不存在的东西短路与具有价值5