首页 > 解决方案 > Javascript:如何使变量“私有”仅用于当前的递归层?

问题描述

我正在尝试制作一个包含 for 循环的函数。但是,在循环中,它会调用自身,并且“下一层”会重置计数器。我知道这可以在 PHP 中使用,但我无法弄清楚如何保持该计数器“受保护”,以免被内部 for 循环重置。

我的原始代码比较复杂,所以我将示例简化为:

function test(a=5){
  for(i=0; i<a; i++){
    console.log(i);
    test(a-1);
  }
}

test();

当我运行它时,我得到“1 1 1 1”。

我期望的是“1 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 2 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 3 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1 4 1 1 1 2 1 2 1 1 2 1 3 1 1 2 1"(在 PHP 中尝试了相同的功能)。

标签: javascriptfunctionvariablesrecursion

解决方案


如果你声明了一个没有outvar,let,const的变量,这个变量就会变成一个全局变量。因此,在您的代码中,您正在创建一个全局变量,然后 arr 递归函数具有相同的i增量。

您需要使用let来声明i.

function test(a=5){
  for(let i=0; i<a; i++){
    console.log(i);
    test(a-1);
  }
}

test();


推荐阅读