for循环内的功能

时间:2019-03-16 05:16:45

标签: javascript function for-loop

我无法掌握结果。我了解前两组输出( func01 1 func2 01-func2 05 )。但是其余的令人困惑。

我的理解是,在func01()中第一次执行for循环之后,由于函数func02(),我到达2,然后是3,但是在{{1 }}。我不知道为什么输出中没有 func01 2和func01 3

func01()

4 个答案:

答案 0 :(得分:1)

这是我得到(格式化)的结果

func01 1
func02 1
func02 2
func02 3
func02 4
func02 5

func01被调用,将i(全局变量)设置为1,并打印一行 然后func01呼叫func02 func02将i重置为1,然后为每个i=1,2,3,4,5打印一行。 然后控制权返回到func01。它已经完成了第一次循环迭代。 i的值为5。然后将i(作为其全局变量)与3进行比较。看到5更大,循环就结束了。

答案 1 :(得分:1)

在不使用var的情况下分配变量,并且该变量在当前作用域中不存在时,将在下一个作用域中查找它。如果不存在,则检查下一个作用域,依此类推。

如果在 any 范围内找不到该变量,则会将其分配给全局范围。因此func01func01都引用并更新了相同的i变量。因此func02运行,循环并完成。然后到func01时,i6,循环不再在func0中运行。

如果将计数器更改为使用var,则可以得到预期的结果。这样会将i的范围限制在它们内部的功能上。

function func02(){
  for (var i = 1; i <= 5; i++){
    document.write("&nbsp;&nbsp;func02 " + i + "<br>");
  }
}

function func01(){
  for(var i = 1; i <= 3; i++){
    document.write("func01 " + i + "<br>");
    func02();
  }
}

func01();

答案 2 :(得分:0)

您尚未将i定义为局部作用域变量,因此将其创建为全局变量。使用letvar

 

function func02(){
  for (i = 1; i <= 5; i++){
document.write("&nbsp;&nbsp;func02 " + i + "<br>");
  }
}

function func01(){
  for(i = 1; i <= 3; i++){
document.write("func01 " + i + "<br>");
func02();
  }
}

func01();
 

答案 3 :(得分:0)

user202729是正确的。在javascript中,如果不声明变量,它将采用全局范围,而不是采用使用该变量的函数范围。

声明您的变量i ,如下所示,

for(var i = 1;i <= 5 ; i++)

或者您可以在函数的开头声明变量,例如

var i;

function func02(){

  for (var i = 1; i <= 5; i++){
    document.write("&nbsp;&nbsp;func02 " + i + "<br>");
  }
}

function func01(){
  for(var i = 1; i <= 3; i++){
    document.write("func01 " + i + "<br>");
    func02();
  }
}

func01();

请参考https://www.w3schools.com/js/js_scope.asp并查找有关javascript变量作用域的信息。