Javascript 如何在if-else语句代码块中获取前一个变量?
我在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
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