Javascript JS合并排序范围请帮助我了解TNAD

Javascript JS合并排序范围请帮助我了解TNAD,javascript,arrays,scope,mergesort,Javascript,Arrays,Scope,Mergesort,有人能帮我理解为什么第一段代码有效,而第二段代码无效吗?试图解决按顺序合并到数组的问题。第一个是解决方案代码,第二个是我提出的代码。 我无法解释为什么I变量似乎在工作循环中的循环中停留,但在我的代码中,当尝试在while循环中使用它时,arr1Item似乎消失了 const-gerry=[0,3,4,31] 常数machmoud=[4,6,30] 常量合并排序=(arr1,arr2)=>{ 常数mergedArr=[]; //初始化计数器 设i=1 设j=1 设arr1Item=arr1[0]

有人能帮我理解为什么第一段代码有效,而第二段代码无效吗?试图解决按顺序合并到数组的问题。第一个是解决方案代码,第二个是我提出的代码。 我无法解释为什么I变量似乎在工作循环中的循环中停留,但在我的代码中,当尝试在while循环中使用它时,arr1Item似乎消失了

const-gerry=[0,3,4,31]
常数machmoud=[4,6,30]
常量合并排序=(arr1,arr2)=>{
常数mergedArr=[];
//初始化计数器
设i=1
设j=1
设arr1Item=arr1[0]
设arr2Item=arr2[0]
而(arr1Item | | arr2Item){
if(arr1项console.log(mergeSort(gerry,machmoud))
代码的主要问题(第二个块)是循环从未更新
arr1Item
arr2Item
的值,因此
while
条件的计算结果只能是第一次。因此得到了一个无限循环。因此,只要您更改
i
j
,也应该将数组中的相应值读取到相关变量中

然而,两种实现都存在一个问题。如果两个数组的第一个数组值都是0,或者即使只有第二个数组以0开头,结果也不会像预期的那样。您应该与未定义的
进行比较。以下是您的代码更正:

const-gerry=[0,3,4,31];
常数machmoud=[4,6,30];
常量合并排序=(arr1,arr2)=>{
常数mergedArr=[];
//初始化计数器
设i=0;
设j=0;
设arr1Item=arr1[i];
设arr2Item=arr2[j];
while(arr1Item!==未定义| | arr2Item!==未定义){
if(arr1Item日志(mergeSort(gerry,machmoud))i
本身就是一个变量。它与数组无关。并不是因为您曾经使用
i
作为数组的索引,
i
以某种方式“链接”到该数组。你可以在很多事情上使用
i
,但是is不会与任何其他对象或数组“结合”,无论你如何使用它。因此,每次更新
i
的值时,都需要“同步”您认为应该维护的任何依赖项。好的,谢谢您的解释。我想我还需要再看几次才能让它成为一种本能。最后一个想法:当我进行while循环时,我是否应该自动假设启动while循环的变量(如果它是变量)需要在while循环内部重新分配,以便能够更改条件并退出循环?如果while条件是
while(arr1[I]!==未定义的| | arr2[I]!==未定义)
,则您甚至不需要这些
arr1Item
变量,然后只需增加
i
j
即可。这是可行的,因为while条件将采用新值
i
,并在
arr1
中执行相应值的查找。。。每次迭代。您可以做的最好的事情是:(1)在逐步执行代码期间,使用调试器(控制台)监视变量的值(
i
arr1Item
,…等)。真正学会使用这个开发工具。它属于开发人员的基本工具包。然后(2)绘制每个变量作为值或引用的内存映射。如果你做对了,所有的怀疑都会消失。