有谁可以解释我这个功能是如何工作的?

时间:2016-12-17 21:20:30

标签: javascript callback

嘿嘿大家!!

有人可以解释一下这个函数及其回调函数。这个东西怎么样?

    function generate(n){
     for(var i = 0; i<n; i++){
            generate(n-1);
            console.log(i + "," + n);
           }
      }

      generate(3)

这是输出: 0,1 0,2 0,1 1,3 0,3 0,1 0,2 0,1 0,2 1,2 1,3 0,1 0,2 0,1 0,2 0,1 2,3

非常感谢!!

1 个答案:

答案 0 :(得分:0)

所以这是一个递归的例子(我认为它像Inception)。

当您第一次调用函数generate(3)时,代码将执行以下步骤:

  1. for(var i = 0; i<n; i++){ generate(n-1); //Once it sees this line inside the loop it *calls itself* so the next step, since n-1 = 2, the function generate(2) is executed inside the if loop within the first function call generate(3)

  2. 在generate(2)中,我们重复第一步,但是n = 2,所以运行以下代码:

    for(var i = 0; i<n; i++){ generate(n-1); //n here is 2, so n-1 is 1. So the function calls itself again with the parameter 1. i.e generate(1)

  3. 如果在这一点上你认为这将永远记住它会在if条件下i = n时停止这样做。

    1. 在generate(1)中运行以下代码:

      for(var i = 0; i<n; i++){ generate(n-1); //generate(0) is called

    2. 在generate(0)中,由于i = 0且n = 0,因此不满足if条件i <0,因此函数generate(0)不调用自身或返回任何值。这是我们进入这个递归洞的最深处,我们开始爬山。

    3. 代码将返回生成(1)(调用generate(0)并需要完成其if循环)。将运行以下代码行:

      console.log(i + "," + n); //Prints out 0,1

    4. 现在,这个generate()实例已经完成了,我们继续攀爬,直到完成之前调用的其余generate()也完成了。

      1. 代码将返回生成(2)并将打印出0,2
      2. 希望更清楚!