当前位置:网站首页>JS的值和引用,复制和传递
JS的值和引用,复制和传递
2022-07-30 05:45:00 【没事下辈子小心点】
值的复制/引用复制
举个例子:
JS中,值复制发生在标量基本类型,也就是null,undefined,字符串,数字,布尔值和ES6中的symbol中。1是1,不会变,a只是克隆1,b也只是另一个克隆1,b自己对自己+1,那么只是b=2了,不会影响a。
var a =1
var b=a //b是a的一个复制本
b++
a //1
b //2
JS中,引用复制发生在对象,包括数组和封装对象,还有函数里面。
c,d是对复合值的引用,那么cd只是指向这个[1],而不是克隆,如果对这个[1]进行运算,导致这个指向的内存区域存储改变,那么引用也会导致c和d都变成[1,2]
var c =[1]
var d = c //d是[1]的一个引用
d.push(2)
c //(2) [1, 2]
d //(2) [1, 2]
什么操作会导致c和d的值不同呢?
var c =[1]
var d=c //d是[1]的一个引用
d.push(2)
c //(2) [1, 2]
d //(2) [1, 2]
d = [1] //只要改变引用指向就行了(在JS中是这样的,起码d是指向数组的引用,不是指向a的指针)
c //(2) [1, 2]
d //(1) [1]
函数传参的时候,实参和形参都是通过上述两种传递方式,都是取决于值的类型(JS是如此)。
function foo(wrapper){
wrapper.a = 42;
}
var obj = {
a:2}
foo(obj)
obj.a // 42
想要在函数中不改变外在实参,单纯拿到实参进行运算,就不应该传递原始值,而是一个复本给函数取得。
function foo(x){
x.push(4);
x.length=0;
x.push(4,5,6,7);
}
var a=[1,2,3]
foo(a)
a //(4) [4, 5, 6, 7]
var a=[1,2,3]
foo(a.slice()) //给函数传递一个浅复本,函数的操作都是对这个浅复本的引用,不会影响到a的指向,
a //(3) [1, 2, 3]
返回对象的浅复本函数是什么呢?万一数组里的结构也比较复杂不是一维数组呢?
下面的深拷贝浅拷贝会提到这一点。
想要在函数中改变外在实参?不如等函数的返回值,在外面直接赋值(改变引用)来得痛快。
函数运行的时候每次都会重新指向,对于结果而言,不同的参数经过函数以后的结果指向也不同,那么这样的结果直接赋值就很安全。
可以采用以上方法验证一个语言的值传递类型
浅复制和深复制
以后再说
边栏推荐
- 原创 Acegi 1.03 安全机制
- 超详细的PCB高可靠辨别方法
- 与所有 ARM 工具、软件兼容?韦斯佰瑞这款MCU内核值得关注!
- 多层板的层数,为啥选项都是偶数?就不能选奇数?
- 边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
- Sklearn : train_test_split()函数的用法
- [Jiangsu University Self-Chemistry Association stm32F103c8t6] Notes [Entry 32 MCU and GPIO initialization parameter configuration]
- 边境的悍匪—机器学习实战:第九章 无监督学习任务
- 重磅揭晓!第十四届深创赛福田预选赛区暨华秋第八届硬创大赛华南分赛区晋
- 【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】
猜你喜欢

华秋第八届硬创赛与安创加速器达成战略合作,助力硬科技项目成长

QT连载1:readyRead()函数,数据分包不完整解决办法

QT连载4:基于QT和STM32H750的LORA试验平台(3)

CNN经典模型发展进程

Rsync realizes folder or data synchronization between Win systems

海量遥感数据处理与GEE云计算技术应用【基础、进阶】

Knowledge distillation method of target detection

昆仑通态屏幕制作(连载2)---基础篇(设定与显示,串口发送)

UAV ecological environment monitoring, image processing and GIS data analysis

边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
随机推荐
联影医疗二面
Rsync实现Win系统间的文件夹或数据同步
DeepLearing4j's deep learning Yolo Tiny realizes target detection
Anaconda 安装低版本tensorflow
Configure MMdetection environment and train
Based on R language geographic weighted regression, principal component analysis, discriminant analysis and other spatial heterogeneity data analysis
CPU的三种工作模式:实模式、保护模式、长模式
Receive emails from gmail with pop3
基于R语言地理加权回归、主成分分析、判别分析等空间异质性数据分析
Meta分析在生态环境领域里的应用
昆仑通态屏幕制作(连载1)---接触篇
Three working modes of CPU: real mode, protected mode, long mode
主机和从机配置,建立ssh连接实现Rviz远程控制
迪文串口屏幕制作(连载一)=====准备工作
The application of Meta analysis in the field of ecological environment
PCB 一分钟科普之你真的懂多层板吗?
How does MATLAB display nii file slice information in the image?
Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health
QT每周技巧(2)~~~~~~~~~界面按钮
逻辑右移和算术右移区别