使用短路评估来定义变量

时间:2016-03-13 01:40:26

标签: javascript scope global-variables short-circuiting

为什么在使用短路评估定义变量时必须使用var关键字?

这有效......

var sum=sum||5;
console.log(sum); //shows 5;

这不起作用......

sum=sum||5;
console.log(sum); //error sum is not defined;

不应该是第二个例子只是使得= = 5但是在全球范围而不是本地吗?

1 个答案:

答案 0 :(得分:1)

执行var sum=sum||5;时内部发生的是:

  • 变量sum已定义,已创建
  • 变量sum被分配了undefined
  • 变量sum被分配了sum || 5的结果,就像说undefined || 55

当您只是执行sum = sum||5时,上面的第一步和第二步不会发生,所以在第三步中,您将使用值将所有不存在的内容短路 5,这就是您收到错误的原因。

为了更好地理解这一点,请执行以下操作:打开浏览器的控制台,然后编写sum。您将收到错误,因为sum不存在。现在,做sum = ''。这里发生的事情是定义/创建了一个变量sum就好像你已经完成了var sum ,它现在已经存在,并且它被赋值''

您应该了解的上述内容是将值undefined与值5 短路的区别将价值为5

的不存在的东西短路