JavaScript while循环在var声明之前接受条件

时间:2017-11-03 12:22:25

标签: javascript while-loop var

我很惊讶以下代码有效:

while(fred !== "stop"){
    var fred = prompt("Should I stop or go?")
};

我在do while循环中理解这一点:

do {
    code to be executed at least once
​}
while (condition);

在函数声明fred为变量之前,JavaScript如何设置条件?

我读过的其他问题与 条件中的var声明有关。

3 个答案:

答案 0 :(得分:5)

来自Mozilla documentation

  

变量声明,无论它们出现在何处,都会在执行任何代码之前进行处理。

  

因为在执行任何代码之前处理变量声明(和一般声明),所以在代码中的任何地方声明变量等同于在顶部声明它。这也意味着变量可以在声明之前使用。此行为称为" hoisting",因为看起来变量声明被移动到函数或全局代码的顶部。

并发出警告:

  

重要的是要指出提升将影响变量声明,但不会影响其值的初始化。达到赋值语句时,确实会赋值:

答案 1 :(得分:1)

使用var声明变量时,JavaScript有点奇怪;它们在函数作用域中声明,而不是像其他语言一样在块作用域中声明。如果你的函数里面有var,那么最后声明会被拉到开头(而不是实例化);所以你的代码变成了:

function () {
    var fred;
    while(fred !== "stop"){
        fred = prompt("Should I stop or go?")
    };
}

刚刚声明时,变量存在并接收undefined的值。如果您想要更合理的块范围变量,请使用let / const。然后你就会得到你期望的行为。

答案 2 :(得分:0)

在声明fred之前,fredundefined,所以undefined !== "stop",这是真的。