Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中重新定义变量不会使其未定义_Javascript_Loops_For Loop_Redeclaration - Fatal编程技术网

Javascript 在循环中重新定义变量不会使其未定义

Javascript 在循环中重新定义变量不会使其未定义,javascript,loops,for-loop,redeclaration,Javascript,Loops,For Loop,Redeclaration,具有以下for循环: for (var i = 0; i < 3; ++i) { console.log(i, p); var p; p = 42; } 但实际上,输出是: 0 undefined 0 42 0 42 既然我们在下一行使用var p(重新声明p),为什么p在控制台.log行中没有定义(总是)?是因为您的变量是函数作用域而不是块作用域 您的for循环已转换为 var p; for (var i = 0; i < 3; ++i) { c

具有以下for循环:

for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    var p;
    p = 42;
}
但实际上,输出是:

0 undefined
0 42
0 42
既然我们在下一行使用
var p
(重新声明
p
),为什么
p
控制台.log
行中没有定义(总是)?

是因为您的变量是函数作用域而不是块作用域

您的for循环已转换为

var p;
for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    p = 42;
}
var-p;
对于(变量i=0;i<3;++i){
控制台日志(i,p);
p=42;
}
这意味着第一次访问p时,它是未定义的

下次它已经在当前函数作用域中初始化,因此将保留初始化值。

因为您的变量是函数作用域,而不是块作用域

您的for循环已转换为

var p;
for (var i = 0; i < 3; ++i) {
    console.log(i, p);
    p = 42;
}
var-p;
对于(变量i=0;i<3;++i){
控制台日志(i,p);
p=42;
}
这意味着第一次访问p时,它是未定义的


下次它已经在当前函数作用域中初始化,因此将保留初始化值。

js中没有块级作用域。
@Bharadwaj实际上,在ES6中,我们有
let
@IonicăBizău yes,OP给出的例子是答案的一部分。你问这个是出于好奇吗?如果您像最有可能的那样在顶部声明变量,那么像这样的相关问题就不会成为问题。通过使用调试器单步执行代码,可以很容易地分析这个特定问题。在“执行”第二个
var p之后,您会注意到
表示
p
的值没有改变。
js中没有块级作用域。
@Bharadwaj实际上,在ES6中,我们有
@IonicăBizău是的,OP套件给出的示例是答案的一部分。你问这个问题是出于好奇吗?如果您像最有可能的那样在顶部声明变量,那么像这样的相关问题就不会成为问题。通过使用调试器单步执行代码,可以很容易地分析这个特定问题。在“执行”第二个
var p之后,您会注意到表示
p
的值没有改变。@IonicăBizău明白了!w3schools->bad:)我认为这充分解释了这一点,但事实上,并不完全如此。
var-p被提升到for循环的上方(它位于任何函数的顶部)。@torazaburo明白你的意思了。更新了答案,谢谢你没有投反对票:)@IonicăBizău明白了!w3schools->bad:)我认为这充分解释了这一点,但事实上,并不完全如此。
var-p被提升到for循环的上方(它位于任何函数的顶部)。@torazaburo明白你的意思了。更新了答案,感谢您没有投反对票:)。