引言
在编程里面,按值传递和按引用传递时是函数的参数传递的两种核心机制,它们会决定函数如何访问和修改外部的计算,从而进行一系列的计算,接下来将从从概念和原理两方面,以两个数字相加来展开举例。
实现
概念
维度 | 按值传递 | 按引用传递 |
数据传递本质 | 传递的数据,不会修改原始的数据 | 传递的是数据的地址,可以直接修改数据的值 |
适用数据类型 | 基本数据 | 复杂数据类型 |
特殊性 |
基本数据类型默认都是按照按值传递进行传递数据 | 需要通过类/对象来实现效果 |
原理
按值传递
addByValue(a: number, b: number) {
return a + b;
}
Button('按值传递')
.onClick(() => {
this.getUIContext().getPromptAction().showToast({ message: '计算结果是:' + this.addByValue(1, 2) })
})
//计算结果是:3
原理:在调用函数addByValue()的时候,只是将1和2的值复制一份,然后传入计算,并没有改变原始的数据。
按引用传递
interface NumberWrapper {
value: number;
}
addByReference(numObj: NumberWrapper, num: number) {
return numObj.value += num
}
Button('按引用传递')
.onClick(() => {
const a: NumberWrapper = { value: 2 }
this.getUIContext().getPromptAction().showToast({ message: '计算结果是:' + this.addByReference(a, 3) })
})
//计算结果是:5
原理:首先在ArkTs里面没有办法直接计算复杂数据类型,然后它是将value的内存地址传递出来,接下就是可以通过内存地址进行计算。
总结
有一个很浅显易懂的例子就是,有一个快递员进行快递的配送,然后你或者你家里的人去取快递,这个就是按值传递,若是你给快递员电话,希望他根据快递上的门牌号地址进行上门配送,这个就是按引用传递。