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次