Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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 - Fatal编程技术网

Javascript 迭代期间变量的范围/寿命

Javascript 迭代期间变量的范围/寿命,javascript,Javascript,for(index1=1;index1

for(index1=1;index1<8;index1++){
var op='#';
对于(index2=index1;index2-1;index2--){
op=op+'#';
}
控制台日志(op);

}
由于以下原因,您的代码与下面的代码片段相同。这意味着,
op
声明一次,但在外部循环的每次迭代中初始化为
#

var op;
for(index1 = 1 ;index1<8;index1++)
{
    op = '#'; 
    for (index2 = index1; index2-1; index2--) 
    {
        op = op + '#';

    }
    console.log(op);
}
var-op;

对于(index1=1;index1变量的范围将是函数范围,因为您使用的是
var

因此,编译器/解释器将通过一个名为提升的过程将此变量移动到函数的开头

如果需要块作用域,请使用
let
而不是var

在代码
的情况下,让
var
似乎不会对输出产生影响。

在封闭函数的顶部创建,或者因为您在全局范围内,所以它是在脚本在全局范围内初始化时创建的

在外循环中,它基本上只是一个
#
赋值,覆盖了以前的任何值

在内部循环中,它会在每次迭代的值上附加另一个
#

如果您使用了一个而不是
var
,那么变量的作用域将限定在外循环的块上,并且在该块外无法访问,尽管在内循环内仍然可以访问。

“变量'op'是在'for'迭代中每次定义和初始化的,还是每次定义一次并用特定值初始化的?”

op
变量在每次父循环迭代(
for(index1=1;index1<8;index1++){…}
)时都会再次创建,但对于
for的每个子循环,它都存在,您只需从子循环重写它的值。

变量“op”是否每次都定义并初始化

没有

“var”是解析器的一个指令,而不是在运行时执行的命令。在循环内、循环外或两者中,将值声明为var都没有区别

我认为如果在循环之外声明变量,可读性会更好

这是一个
问题

这是您的代码片段,它将记录外部循环中每次迭代的递增值:

for(index1=1;index1<8;index1++){
var op='#';
对于(index2=index1;index2-1;index2--){
op=op+'#';
}
控制台日志(op);

}
Outer for循环从1迭代到7,出现7个日志。再看看输出..哦,奇怪..我以为它们是9个。我在chrome调试器中尝试了该代码(因为我短暂失去了互联网连接),它记录了8次