第一条条件:
IndexOutOfBoundsException
第二条条件:(注意:每Exception
的当前分数增量)
if (currentQuestionIndex == 2) {
var xvalue = currentscore;
}
我想在1st条件中访问currentQuestionIndex
的值,如果条件则在2nd中引用它。有没有办法存储变量的值并在以后引用它而不考虑条件
答案 0 :(得分:2)
只需在xvalue
语句之外定义变量if
:
///Just for testing
var currentQuestionIndex = 2
var currentscore = 2
///
var xvalue = 0;
if (currentQuestionIndex == 2) {
xvalue = currentscore;
}
///Just for testing
currentQuestionIndex = 5
currentscore = 4
console.log('xvalue: ' + xvalue)
///
if (currentQuestionIndex == 5 && currentscore == xvalue) {
console.log('thanks for your participation')
///Just for testing
console.log('xvalue: ' + xvalue)
///
}
阅读有关变量范围的内容,例如here。
答案 1 :(得分:2)
实际上,您可以访问var
语句中使用if
声明的变量。 if
块(或任何块)不会创建新范围:在JavaScript中,只有函数执行此操作。
这是有效(例如来自docs):
if (true) {
var x = 5;
}
console.log(x); // x is 5
这是因为JavaScript解释器在执行它之前扫描你的函数,并跟踪所有变量声明(比如将它移到顶部)。
因此,上面的代码等同于(解释器透视图):
var x;
if (true) {
x = 5;
}
console.log(x); // x is 5
引自MDN:
ECMAScript 2015之前的JavaScript没有阻止语句范围; 相反,在块中声明的变量是函数的本地变量 该块所在的(或全局范围)。
如上所述,随着ECMAScript 2015 let
的推出,这种行为会发生变化。
if (true) {
let x = 5;
}
console.log(x); //x is not defined
因此,要使用您的代码作为示例,这将运行正常:
/* arbitrary values */
var currentQuestionIndex = 2;
var currentscore = 10;
if (currentQuestionIndex == 2) {
var xvalue = currentscore; //declared inside if block
}
if (currentQuestionIndex == 2 && xvalue == 10) { //I can read here
console.log('value of xvalue: ' + xvalue); //can read here too: will print 10
console.log('thanks for your participation')
}
无论如何,仅仅因为你可以,并不意味着你应该。作为可读性和代码组织的问题,建议的做法是在范围的开头声明变量(全局,如果在任何函数之外,或本地,如果在一个功能)。
答案 2 :(得分:0)
您可以在if语句之外设置 public DbSet<TableName> TableNames { get; set; }
变量。
xvalue
或简单地说:
var xvalue = 0;
这样变量总是可以被任何其他函数访问,即使你没有给它一个值。
答案 3 :(得分:0)
只需在第一个xvalue
之外声明if
,就像这样:
var xvalue; // decalare it here so it can be accessed by both if statements (probably you'll have to initialize it with something)
if (currentQuestionIndex == 2) {
xvalue = currentscore; // don't redeclare it here so you won't shadow the above one
}
详细了解范围,变量生存期和阴影!