想象一样,现在有一个苹果,两个苹果,一箱苹果在你面前
看,上面的三种苹果,(我写的是苹果就是苹果)
语境·1
例如你现在要搬运苹果!
那么现在上面有苹果,一个,两个,三个没问题吧
问题很大吗,不可能搬不动!?
语境·2
但是让你搬五箱的苹果你搬运的完吗,很显然正常人不可能搬完,那么只需要把这箱苹果留在原地
需要的时候去拿
猜猜看,语境1中
哪个是传值!?
哪个是传址?!
哎,那个留在原地成了关键词,所以那句话代表的是传址,传址就是指把这箱苹果的路径告诉你,让你去找到它,传值就是苹果就在你面前,不需要去刻意的寻找
如果把苹果换成内存呢?
那就是真正意义上的传值、传址
上图
代码
let a = 10;
let b = a ;
a = 20 ;
console.log(a,b);
a = 20;
b = 2;
console.log(a,b);
let x = {
name : 'qiudaoyu',
id : 'wu',
sex : 'man'
}
b = x ;
console.log(x,b);
块作用域,每一个输出语句后,块作用域结束(大概)
传值,传址是为了防止一条代码无限粘贴的情况
例如上面那个例子中,我们不可能再写一个一模一样的对象数值吧,然后把它赋给b
let x = {
name : 'qiudaoyu',
id : 'wu',
sex : 'man'
}
b = {
name : 'qiudaoyu',
id : 'wu',
sex : 'man'
}
传址解决了这个问题
我们也不可能给每一个已有的字符串再重复几次
小结
传值、传址是一个过程,是代码的流程,一种重复利用的专业术语
用大白话来说,传值是占内存小的数据(字符串、数字等),传址是占内存大的数据(对象、数组)
通过搬苹果来类比传值、传址,量小的时候我们可以一次搬完,量大只需要把它留在原地等着