[ Day 10 ] - 传值与传址

传值与传址

先来看案例

案例一

let a = 50;
let b = a;
console.log (a); // 显示为 50
console.log(b); // 显示为 50

b = 999;
console.log(a);  // 显示为 50
console.log(b);  // 显示为 999
a === b;

  • 当 b 重新赋予值为 999 时, a 的资料值一样为 50,彼此的资料与记忆体位址是独立的
  • 最後 a === b 为 false

案例二

 let data1 = { value : 99 };
 let data2 = data1;
 console.log(data1);  // 显示为 { value : 99 }
 console.log(data2); // 显示为 { value : 99 }
 
 data1.value = 999;
 console.log(data1);  // 显示为 { value : 999 }
 console.log(data2);  // 显示为 { value : 999 }
  • 在 data1.value 更新为 999 时,data2 的内容也一并变动
  • 是因为在 data2 = data1 时,指向的是同样的记忆体位址

传值?还是传址?

  • 传值(pass by value):在基本型别中(string、number、boolean、null、undefined、Symbol),其变数的更新是以传值的方式,也就是在复制变数时,更新的是变数中的『值』。
  • 传址(pass by reference):除了基本型别以外的都算物件型别(Object、Array、function),以指向记忆体位址进行传递。

参考与学习资源

  • 0 陷阱!0 误解!8 天重新认识 JavaScript!
  • JavaScript 指南
  • 六角学院 - JavaScript 必修篇 - 前端修练全攻略

本日小节

传值传扯有时的还真的会不小心搞错,後面在处理物件的时候还会有资料处理上的误区(?)
呒虾米下意议一直打传址我到底在干麻…XD
这是我的学习纪录,欢迎各路大神的指点指教,我们下次见!


<<:  Day25-memo

>>:  Day26-useCallback

用React刻自己的投资Dashboard Day7 - CORS与Proxy Server

tags: 2021铁人赛 React 上一篇在串接API的时候有遇到一个前端蛮常见的问题,跨来源资...

企划实现(22)

使用firebase简易资料库 在使用前要将专案连结至firebase 第一步:在firebase创...

贩子去赌场了

各位看官不好意思,贩子发现其实可以从9/15才开始发废文,原本想说从9/1开始写,但发现底子不够,很...

网路设备:交换机

来谈谈最容易搞混的交换机和路由器 了解後,往後在Hypervisor看到虚拟网路设备(如 虚拟交换机...

Day 11 : 函式的介绍

学完前面的一些程序观念後,我想来简单说一下函式的概念。 函式(function)简单来讲就是一个小程...