2016-03-13 28 views
1

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

这工作...

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

这不工作...

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

不应该第二个例子只是使之和=== 5,但在全球范围内,而不是本地的?

回答

1

当你做var sum=sum||5;什么内部发生的情况是这样的:

  • 变量sum定义,它的创建,
  • 变量sum被分配了一个undefined
  • 变量sum被分配sum || 5的结果,这就像是说undefined || 5,这是5

当你简单地做sum = sum||5上面的第一步和第二步都没有发生,所以在第三步中,你将的所有5的值不存在短路,这就是为什么你会得到这个错误。

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

上面,你应该了解的本质,是有之间的差异短路与价值的价值undefined5短路的东西,不具有存在的价值5