Javascript 使用短路评估定义变量

Javascript 使用短路评估定义变量,javascript,scope,global-variables,short-circuiting,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; 第二个示例不应该只将sum==5设置为全局范围而不是局部范围吗?当您执行var sum=sum | 5这是: 变量sum已定义,已创建 变量sum分配了一个未定义的值 变量sum被分配sum | | 5的结果,这就像

为什么在使用短路评估定义变量时必须使用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
    分配了一个
    未定义的值
  • 变量
    sum
    被分配
    sum | | 5
    的结果,这就像说
    undefined | | 5
    ,即
    5
当您只需执行
sum=sum | | 5
时,上面的第一步和第二步不会发生,因此在第三步中,您短路了一些根本不存在的值
5
,这就是为什么会出现该错误

为了更好地理解这一点,请这样做:打开浏览器控制台,只需编写
sum
。您将得到一个错误,因为
sum
不存在。现在,做
sum='
。这里发生的事情是,定义/创建了一个变量
sum
,就好像你做了
var sum
,它现在存在了,并且被赋予了值
'

您应该理解,上述内容的实质是,将值
未定义的
与值
5
短路和将值
5
不存在的东西短路是有区别的