【问题标题】:JavaScript - Why different output from if/else statement while using a variable declared before the statement? [duplicate]JavaScript - 为什么在使用语句之前声明的变量时与 if/else 语句的输出不同? [复制]
【发布时间】:2016-03-07 13:02:16
【问题描述】:

我的问题是关于以下代码:

var d = new Date();
var weekday = ["su", "mo", "tu", "we", "th", "fr", "sa"];
var deliver = weekday[d.getDay()];

if(condition){
    if(d.getDay() == 1){
       d.setHours(d.getHours() + 24); // adds a day
    }
    if(d.getUTCMonth() == 0 && d.getUTCDate() == 1){
        // do something
    } else {
        // version 1 or version 2
    }
}

//version 1: var deliver = weekday[d.getDay()];
//           document.getElementById("leverdatum").innerHTML = deliver;

//version 2: document.getElementById("leverdatum").innerHTML = deliver;;

为什么,如果我使用版本 1,输出是“tu”,如果我使用版本 2,输出是“mo”?

【问题讨论】:

  • 因为这个? d.setHours(d.getHours() + 24); // adds a day。由于变量托管,您不应该将 var 放在块语句中,这可能会消除一些混乱。
  • Version 1 & Version 2 — 删除 var 没有区别。
  • 我认为这比你所展示的更多——你如何看待这个输出?额外的var 不会有任何区别,它在同一个范围内。
  • 如果 conditionfalse 它不会执行 +24h。我认为这就是 OP 的意思。
  • 是的,我不太明白。你希望deliver; 做什么?

标签: javascript


【解决方案1】:

var 在该行的存在(或不存在)绝对没有任何作用。

重要的部分是= weekday[d.getDay()];

因为(在撰写本文时)是星期一,d.setHours(d.getHours() + 24); // adds a day 将增加一天。让星期二成为一天。

但是如果你不把d的值转换成一天并赋值给deliver你改变d的值之后,那么你将继续拥有原始字符串。

【讨论】:

  • 感谢您理解我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多