将变量值存储在if语句中

时间:2017-02-12 11:24:53

标签: javascript variables if-statement storage

第一条条件:

IndexOutOfBoundsException

第二条条件:(注意:Exception的当前分数增量)

if (currentQuestionIndex == 2) {
    var xvalue = currentscore;
}

我想在1st条件中访问currentQuestionIndex的值,如果条件则在2nd中引用它。有没有办法存储变量的值并在以后引用它而不考虑条件

4 个答案:

答案 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
}

详细了解范围变量生存期阴影