网站首页 > 技术文章 正文
基本类型传递?式
由于js中存在复杂类型和基本类型,对于基本类型??,是按值传递的。
var a = 1;
function test(x) {
x = 10;
console.log(x);
}
test(a); // 10
console.log(a); // 1
虽然在函数 test 中 a 被修改,并没有有影响到 外部 a 的值,基本类型是按值传递的
复杂类型按引?传递
我们将外部 a 作为?个对象传? test 函数
var a = {
a: 1,
b: 2
};
function test(x) {
x.a = 10;
console.log(x);
}
test(a); // { a: 10, b: 2 }
console.log(a); // { a: 10, b: 2 }
可以看到,在函数体内被修改的 a 对象也同时影响到了外部的 a 对象,可?复杂类型是按引?传递的.
可是如果再做?个实验:
var a = {
a: 1,
b: 2
};
function test(x) {
x = 10;
console.log(x);
}
test(a); // 10
console.log(a); // { a: 1, b: 2 }
外部的 a 并没有被修改,如果是按引?传递的话,由于共享同?个堆内存, a 在外部也会表现为 10 才对. 此时的复杂类型同时表现出了按值传递和按引?传递的特性。
按共享传递
复杂类型之所以会产?这种特性,原因就是在传递过程中,对象 a 先产?了?个 副本a ,这个 副本a 并不是深克隆得到的 副本a , 副本a 地址同样指向对象 a 指向的堆内存。因此在函数体中修改 x=10 只是修改了 副本a , a 对象没有变化. 但是如果修改了 x.a=10 是修改了两者指向的同?堆内存,此时对象 a 也会受到影响。
有?讲这种特性叫做传递引?,也有?种说法叫做按共享传递。
- 上一篇: web前端JavaScript笔记四 正则表达式
- 下一篇: 前端开发笔记(二)
猜你喜欢
- 2025-01-05 vue 3 学习笔记 (八)——provide 和 inject 用法及原理
- 2025-01-05 vue3 学习笔记 (一)——mixin 混入
- 2025-01-05 golang+mysql+GORM学习笔记
- 2025-01-05 Vue3 学习笔记,快速初始化Vue项目及 data 函数用法学习(二)
- 2025-01-05 Web前端经典面试题(三)
- 2025-01-05 前端工具ESLint
- 2025-01-05 「React Hooks 学习笔记」useMemo
- 2025-01-05 Jquery属性——学习笔记(一)
- 2025-01-05 SwiftUI学习笔记,可视化编辑和界面布局(二)
- 2025-01-05 「React Hooks 学习笔记」useCallback
你 发表评论:
欢迎- 581℃几个Oracle空值处理函数 oracle处理null值的函数
- 576℃Oracle分析函数之Lag和Lead()使用
- 561℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 561℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 556℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 546℃【数据统计分析】详解Oracle分组函数之CUBE
- 535℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 530℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)