Javascript使用简单递归函数通过引用传递数字问题

Javascript使用简单递归函数通过引用传递数字问题,javascript,Javascript,我构建了这个简单的递归函数 递归很容易看到,因为它应该绘制一个树状的嵌套框模式。在每次迭代中,框也会稍微向下移动,以使重叠线的位置更加清晰 ___________ 1. | | | | | | | | | | |___________| ___________ 2. |___________| | | | | |

我构建了这个简单的递归函数

递归很容易看到,因为它应该绘制一个树状的嵌套框模式。在每次迭代中,框也会稍微向下移动,以使重叠线的位置更加清晰

    ___________
1. |           |
   |           |
   |           |
   |           |
   |           |
   |___________|

    ___________
2. |___________|
   |     |     |
   |     |     |
   |     |     |
   |     |     |
   |_____|_____|
   |_____|_____|

    __ __ __ __
3. |___________|
   |_____|_____|
   |  |  |  |  |
   |  |  |  |  |
   |  |  |  |  |
   |__|__|__|__|
   |__|__|__|__|
   |__|__|__|__|

然而,这在迭代3中突然停止工作,这可以从
width>100
更改为
width>50
中看出

    __ __ __ __
3. |_____      |
   |__|__|     |
   |  |  |     |
   |  |  |     |
   |  |  |     |
   |__|__|_____|
   |__|__|
   |__|__|
似乎值可能是通过引用传递的,但我认为JS中的数字是通过复制值传递的,而且我从头开始创建了大多数传递的值,例如
…,x+width,…
width2=width*0.5

为什么程序不起作用



感谢Benni的轻微更正。

第一个猜测:将代码更改为

 if (width > 100) {
  var width2 = width * 0.5;
  box(x, y + 5, width2, height);
  box(x + width2, y + 5, width2 , height);
}

第一个猜测:将代码更改为

 if (width > 100) {
  var width2 = width * 0.5;
  box(x, y + 5, width2, height);
  box(x + width2, y + 5, width2 , height);
}

第一个猜测:将代码更改为

 if (width > 100) {
  var width2 = width * 0.5;
  box(x, y + 5, width2, height);
  box(x + width2, y + 5, width2 , height);
}

第一个猜测:将代码更改为

 if (width > 100) {
  var width2 = width * 0.5;
  box(x, y + 5, width2, height);
  box(x + width2, y + 5, width2 , height);
}

在Javascript中,变量总是按值传递。它甚至不支持通过引用传递参数

问题是您使用的是全局变量:

width2 = width * 0.5;
当您进行第一次递归调用时,它将更改全局变量的值,因此第二次递归调用将使用上一次迭代的值

在函数中声明变量,使其为局部变量:

var width2 = width * 0.5;

在Javascript中,变量总是按值传递。它甚至不支持通过引用传递参数

问题是您使用的是全局变量:

width2 = width * 0.5;
当您进行第一次递归调用时,它将更改全局变量的值,因此第二次递归调用将使用上一次迭代的值

在函数中声明变量,使其为局部变量:

var width2 = width * 0.5;

在Javascript中,变量总是按值传递。它甚至不支持通过引用传递参数

问题是您使用的是全局变量:

width2 = width * 0.5;
当您进行第一次递归调用时,它将更改全局变量的值,因此第二次递归调用将使用上一次迭代的值

在函数中声明变量,使其为局部变量:

var width2 = width * 0.5;

在Javascript中,变量总是按值传递。它甚至不支持通过引用传递参数

问题是您使用的是全局变量:

width2 = width * 0.5;
当您进行第一次递归调用时,它将更改全局变量的值,因此第二次递归调用将使用上一次迭代的值

在函数中声明变量,使其为局部变量:

var width2 = width * 0.5;

这似乎很奇怪,应该会有任何不同,虽然它确实有,稍微,代码现在也稍微整洁了一点,无论如何应该是这样,尽管仍然不工作。这里需要局部变量。注意第二个box()调用中的更改,tooIt’这似乎很奇怪,应该会有任何不同,尽管它确实有点不同,但代码现在也稍微整洁了一点,而且应该是这样,尽管仍然不起作用。这里需要局部变量。注意第二个box()调用中的更改,tooIt’这似乎很奇怪,应该会有任何不同,尽管它确实有点不同,但代码现在也稍微整洁了一点,而且应该是这样,尽管仍然不起作用。这里需要局部变量。注意第二个box()调用中的更改,tooIt’这似乎很奇怪,应该会有任何不同,尽管它确实有点不同,但代码现在也稍微整洁了一点,而且应该是这样,尽管仍然不起作用。这里需要局部变量。注意第二个box()调用中的更改,toowhoah,默认情况下不在您的范围内声明?非常感谢你。像这样的静态是一种潜在的强大功能,但我相信最好是在全局定义中使用“var”这样的术语,而不是在本地使用。@alan2欢迎使用Javascript!:Dwhoah,默认情况下不在中的范围内声明?非常感谢你。像这样的静态是一种潜在的强大功能,但我相信最好是在全局定义中使用“var”这样的术语,而不是在本地使用。@alan2欢迎使用Javascript!:Dwhoah,默认情况下不在中的范围内声明?非常感谢你。像这样的静态是一种潜在的强大功能,但我相信最好是在全局定义中使用“var”这样的术语,而不是在本地使用。@alan2欢迎使用Javascript!:Dwhoah,默认情况下不在中的范围内声明?非常感谢你。像这样的静态是一种潜在的强大功能,但我相信最好是在全局定义中使用“var”这样的术语,而不是在本地使用。@alan2欢迎使用Javascript!:D