执行checking_plus_1函数后数组是否会更新?原因是什么?
关于
checking_plus_1调用后array是否更新的判断 你给出的相关代码片段如下:
for(let i = array.length - 1; i > 0; i--){ if(k < test.length){ checking_plus_1(combine, array, test[k]) if(array[i] == 100 && array[i-1] == 100){ array[i] = array[j]; array[i-1] = array[j-1]; array[j] = test[k]; array[j-1] = test[k]; combine[j] = test[k]; combine[j-1] = test[k]; changeRowtoZero_minus_1(combine, array, i, i-1) } } }
具体结论
- 按照你现在的传参写法,JavaScript里数组是引用类型,只要
checking_plus_1内部对传入的数组做原地修改(比如按下标改元素值、调用splice/push/sort这类直接改动原数组的方法),外层的array就会同步更新。 - 如果执行完函数后
array没有任何变化,只会是以下两类原因:checking_plus_1内部根本没对传入的数组做原地写操作:要么函数只是读取数组值做计算返回,没有修改逻辑;要么函数内部先把传入的数组做了拷贝,所有修改都作用在内部新建的数组副本上,根本没碰传进来的原数组。checking_plus_1内部误改了形参的指向:比如函数里写了array = [/* 一堆新值 */]这种直接给形参变量重新赋值的代码,这类操作只会改函数作用域内的局部变量指向,完全影响不到外层的原数组。
- 额外提一句你贴的这段循环的逻辑:调用
checking_plus_1之后的所有数组修改代码,都要满足array[i] == 100 && array[i-1] == 100的判断条件才会执行。如果checking_plus_1本来预期要把对应位置的值改成100但实际没生效,后面整个修改块根本不会跑,从外层看就会表现为数组完全没更新。
内容的提问来源于stack exchange,提问作者newbies
相关产品推荐
相关产品推荐

