JavaScript按引用传值时param=[1]为何输出0?调换行得[0,2]
问题解析:数组参数赋值与引用的关系
一、原代码中param = [1]的作用与结果
JavaScript里数组属于引用类型,当你把data传入changeData函数时,参数param最初和data指向内存中同一个数组(即[0])。
但执行param = [1]这行代码时,你是给param变量重新赋值了一个全新的数组对象——此时param的指向完全脱离了原来的data数组,转而指向新创建的[1]数组。
后续的param.push(2)操作只会修改这个新数组,让它变成[1,2],但这和原本的data数组毫无关联,所以最终data仍然是最初的[0]。
二、调换代码顺序后结果变化的原因
如果调换函数内两行代码的顺序:
function changeData(param) { param.push(2); param = [1]; }
第一步执行param.push(2)时,param还和data指向同一个数组,这个push操作会直接修改原数组,将data变成[0,2]。
之后执行param = [1],只是给param赋值新数组,但原数组已经被修改完成,所以最终data的结果就是[0,2]。
内容的提问来源于stack exchange,提问作者Azm
相关产品推荐
相关产品推荐

