declaration for variable in while condition in javascript

前端 未结 4 932
别跟我提以往
别跟我提以往 2020-12-28 12:57

In essence, I am trying to declare a variable in the condition-part of a while loop in javascript:

while (var b=a.pop()) {
  do_sth(b)
}

Ye

相关标签:
4条回答
  • 2020-12-28 13:38

    JavaScript doesn't have block scope. So all var declarations are at function scope. So declaring a variable in a while expression doesn't make sense in JavaScript.

    Additionally, you should end your statements with a semicolon. It's not strictly necessary, but it's highly recommended.

    0 讨论(0)
  • 2020-12-28 13:45

    JavaScript does not have block scope. It has function scope. So to make sure that humans and JavaScript both read the code the same way, you should manually hoist your var declarations right up to the top of functions.

    Here's what JSLint says about your code:

    Problem at line 1 character 8: Expected an identifier and instead saw 'var'.
    

    Use JSLint, at least while you're learning JavaScript. You'll learn a lot very quickly. It will hurt your feelings.

    0 讨论(0)
  • 2020-12-28 13:54

    The question is a little dated, but I think the answers all miss an important distinction. That is, a while loop expects an expression that evaluates to a conditional, i.e., a boolean or value that can be converted to a boolean. See Mozilla docs for details.

    A pure assignment (without instantiation) is coerced to a boolean via its default return value (the value of the right-hand-side).

    A var (or let or const) is a statement that allows an optional assignment but has a return value of undefined.

    You can easily test this in your console:

    var foo = 42; // undefined
    bar = 42      // 42
    

    The return values alone don't answer the question, since undefined is falsey, but does show that even if JS let you put a var in a conditional it would simply always evaluate to false.

    Others have mentioned for statements and that they allow declaration and instantiation of variables. This is true, but the documentation explains that for expects a statement or assigment.

    Opinions may vary, but for me all this adds up to an understandable consistency not a quirk in behavior with regard to loops. A while loop is better thought of as a looping version of an if statement than akin to a for loop. If there is quirkiness in all of this, it's the for statement's wholesale divergence from the language's normal syntax.

    0 讨论(0)
  • 2020-12-28 13:56

    Yes, it is.

    If you want to, you can use a for loop, like this:

    for (var b; b = a.pop(); ) {      //Note the final semicolon
        do_sth(b);
    }
    
    0 讨论(0)
提交回复
热议问题