JavaScript 中函数参数的传递方式既有值传递(by value),也有引用传递(by reference)。
值传递
函数参数以基本数据类型(如Number、String、Boolean等)为例,是以值传递的方式进行的。值传递表示将实际传递给函数的参数值(即实参)复制一份,传递给函数中对应的参数(即形参),函数中对参数值的修改不会影响到实参的值
下面的示例说明了这一点:
function valuePass(a) {
a = 2;
console.log(a); // 输出2
}
let b = 1;
valuePass(b);
console.log(b); // 输出1
在这个例子中,变量 b
的值为 1
,被作为参数传递给函数 valuePass
中的形参 a
。在函数内部将 a
的值改为 2
后,输出的值为 2
。但是当函数执行完成后,变量 b
的值仍然为 1
,说明函数 valuePass
对形参 a
的修改并没有影响到实参 b
的值。
引用传递
函数参数以对象(Object)为例,则是通过引用传递的方式进行的。引用传递表示传递的是实参的引用(即实参本身在内存中的地址),函数中对参数引用值的修改会直接影响到实参的值。
下面的示例说明了这一点:
function referencePass(obj) {
obj.prop = 'new value';
console.log(obj.prop); // 输出new value
}
let obj = {};
obj.prop = 'old value';
referencePass(obj);
console.log(obj.prop); // 输出new value
在这个示例中,变量 obj
存储了一个包含属性 prop
的空对象,并被作为参数传递给函数 referencePass
中的形参 obj
。在函数内部修改了 obj.prop
的值为 'new value'
,并通过 console.log
输出了修改后的值。而在函数执行完成后,输出变量 obj.prop
的值也是 'new value'
,说明函数 referencePass
对形参 obj
的修改直接影响到了实参 obj.prop
的值。
需要注意的是,引用传递存在风险,因为在函数内部可能会意外或者无意间地修改实参的值,导致不可预测的结果产生,因此建议在使用时慎重考虑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享 - Python技术站