如何停止递归函数修改自己的变量?

时间:2019-04-16 17:32:54

标签: javascript sorting variables recursion

我正在尝试创建一个使用递归的javascript排序算法。它会不断修改自己的变量。我该如何阻止呢?

一个例子是(伪代码):

function fun():
   a = random 
   fun()
   return a

问题是,运行sort()会将a从其原始随机值修改为另一个值。

我尝试使用“ this.varname”,但这似乎没有什么不同。

我的完整代码是here,并且递归函数在第52行。要覆盖的变量是“较大”和“较小”。

如果您阻止它递归运行(注释68-71),代码可以工作,但是很明显这意味着排序只能部分完成。如果您想运行代码进行测试,则需要'p5.js'。我也为错误的代码感到抱歉。

一如既往,我们将尽力帮助您,感谢您(我和未来的Google员工)为您提供的所有帮助。

奖励积分:有人知道这是什么类型的排序功能吗?

1 个答案:

答案 0 :(得分:1)

我假设您在python中有背景

在javascript变量中,声明变量时,在变量名称之前“需要” 3个关键字(let,const,var)之一。例如,js中的let a = 10;与python中的a = 10相同。但是,正如您所看到的,您的代码确实可以运行,因此声明没有这些关键字之一的变量必须起作用,对吗?是的,但并非您期望的那样。 js中的a = 10window.a = 10相同。因此,实际上是将值10绑定到窗口对象上的键“ a”,而不是声明功能范围内的变量。

在下面的示例中,a内的foo的作用域为函数,而a内的bar的作用域为窗口对象。

function foo() {
  let a = 10
}

function bar() {
  a = 10
}

console.log(window.a)

foo();
console.log(window.a)

bar();
console.log(window.a)