Javascript 如何停止递归函数修改它';谁拥有自己的变量?

Javascript 如何停止递归函数修改它';谁拥有自己的变量?,javascript,sorting,variables,recursion,Javascript,Sorting,Variables,Recursion,我正在尝试创建一个使用递归的javascript排序算法。它不断修改自己的变量。我该怎么阻止这一切 例如(psuedocode): 问题是运行sort()会将原始随机值修改为不同的随机值 我尝试过使用“this.varname”,但似乎没有什么不同 我的完整代码是,递归函数在第52行。被覆盖的变量是“大”和“小” 如果停止递归(注释68-71),则代码可以工作,但显然这意味着排序只能部分完成。如果要运行代码进行测试,则需要“p5.js”。我也为错误的代码感到抱歉 一如既往,我们感谢您的帮助,感谢

我正在尝试创建一个使用递归的javascript排序算法。它不断修改自己的变量。我该怎么阻止这一切

例如(psuedocode):

问题是运行sort()会将原始随机值修改为不同的随机值

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

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

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

一如既往,我们感谢您的帮助,感谢您花时间帮助我(以及未来的谷歌用户)

附加点:有人知道这是什么类型的排序函数吗?

我假设你有python的背景

在javascript中,当声明变量名称时,变量在变量名称之前“需要”三个关键字中的一个(let、const、var)。例如
设a=10与python中的
a=10
相同。然而,正如您所看到的,您的代码确实在运行,所以声明一个没有这些关键字的变量必须有效,对吗?是的,但不是你想象的那样a=10
window.a=10
相同。因此,实际上是将值10绑定到window对象上的键“a”,而不是声明一个函数范围的变量

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

函数foo(){
设a=10
}
功能条(){
a=10
}
console.log(window.a)
foo();
console.log(window.a)
bar();

console.log(window.a)
在哪里声明了
a
?我猜超出了函数的范围。改为第一行
var a=random
,它的作用域就是函数本身。作用域,作用域就是你的问题。在
fun
中定义
a
,您的问题就会消失。我不知道这是否是代码的意图,但它不会在该函数之外修改
a
。。。我最初在声明变量之前做了很多事情(java在这方面做得很好),但最终得出的结论是javascript不需要它们。无论如何,谢谢你!
function fun():
   a = random 
   fun()
   return a