我很惊讶以下代码有效:
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声明有关。
答案 0 :(得分:5)
变量声明,无论它们出现在何处,都会在执行任何代码之前进行处理。
和
因为在执行任何代码之前处理变量声明(和一般声明),所以在代码中的任何地方声明变量等同于在顶部声明它。这也意味着变量可以在声明之前使用。此行为称为" 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
之前,fred
为undefined
,所以undefined !== "stop"
,这是真的。