Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在if-else语句代码块中获取前一个变量?_Javascript_Html - Fatal编程技术网

Javascript 如何在if-else语句代码块中获取前一个变量?

Javascript 如何在if-else语句代码块中获取前一个变量?,javascript,html,Javascript,Html,我在if/else语句中记录了一些事件,例如: function foo(shown) { if (shown == "div1") { function check() { var var_2 = new Date().toISOString(); console.log("time", window.var_1 + " - " + var_2); } var button = d

我在if/else语句中记录了一些事件,例如:

function foo(shown) {
  if (shown == "div1") {
    function check() {
      var var_2 = new Date().toISOString();
      console.log("time", window.var_1 + " - " + var_2);
    }

    var button = document.getElementById("button2");
    button.addEventListener("click", check);
  } else if (shown == "div2") {
    var var_3 = new Date().toISOString();
    console.log("time:", var_2 + " - " + var_3);
  }

  var button = document.getElementById("button");
  button.addEventListener("click", check);
  return true;
}
问题在于:

    } else if (shown == 'div2') {

      var var_3 = new Date().toISOString();
      console.log('time:', var_2 + ' - ' + var_3 );

    }

var_2
无法访问,我正在获取未捕获的引用错误:var_2未定义,如何访问此变量并将其登录到控制台?

在函数开头声明变量:

函数foo(如图所示){
让var_2=“”;
让var_3=“”;
如果(显示==“div1”){
函数检查(){
var_2=新日期().toISOString();
console.log(“time”,window.var_1+“-”+var_2);
}
var button=document.getElementById(“button2”);
按钮。addEventListener(“单击”,检查);
}else if(显示==“div2”){
var_3=新日期().toISOString();
日志(“时间:”,变量2+“-”+变量3);
}
var button=document.getElementById(“按钮”);
按钮。addEventListener(“单击”,检查);
返回true;

}
不要在
if
子句中声明函数;这是“严格”模式中的错误,通常是一种糟糕的做法。并且不能访问嵌套函数中声明的变量。您可以从函数返回值并在外部范围内设置变量。@Pointy-在严格模式下不是错误。严格模式只是让你做的时候稍微理性一点。但是是的,在一般情况下绝对是个坏主意。@T.J.Crowder真的吗?嗯,我认为条件块中的
函数
声明是不允许的。可能应该是这样,因为这很奇怪。另一件非常值得怀疑的事情是在这样的函数中添加一个事件侦听器。每次调用该函数时(请注意,我们不知道如何调用或为什么调用它),都会添加另一个事件侦听器。@Pointy-不,ES5仍然将它们作为允许的扩展,即使在严格模式下也是如此。:-)我认为有希望将它们演变成函数语句(尽管在ES5中引入严格模式时,它们本可以禁止它们,但后来又放松了严格模式——但有很多事情在进行,有很多相互冲突的输入,而将ES5推出已经够麻烦的了)。因此,ES2015基于跨浏览器工作的交叉点,以松散和严格的方式编纂了它们的语义,并将其保留在那里。我在第三章中解释这一点时很开心谢谢你的帮助。我在顶部声明了
var_2
with,我得到了
未定义的
请检查我的编辑现在我得到了一个空白``输出如下:
time:-2021-02-28811:39:47.896Z