之前遇到过的一个问题,当时没有说清楚,或者是没有说到点上。看到知乎上的人有人这样回答,get到之前面试官问的点。
作者:请叫我张先森
链接:https://www.zhihu.com/question/306350790/answer/558003629
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
只有值类型,只有引用类型,和两者并存的语言都有,并且都是合理的。JavaScript 只是挑了一种来实现。
首先,基本类型是传值的,引用类型是传址的。在计算机中,有两个概念 堆和栈 , 栈是用来存放 基本数据类型 以及 引用类型的地址;堆是存放数组和对象(就JS 来说) ; 这种存在的原因就是:如果你声明了一个对象
var a = {
name:"凡高艺术",
address:"南京"
};
赋值 ,比如 b = a ; 那么按照值传递,是不是得拷贝一份对象(系统得开辟新的内存),然后传给b;如果赋值给N 个变量,你觉得 一个相同的值,拷贝n份,你觉得是不是浪费(因为内存是有限的)修改,比如你b =a ,b.name=“测试”; 此时此刻你只能改变b对象的值,并不能改变a的值,但是大多数情况下,我们都是希望改变b的同时也改变a打一个比方: 你(a)有一栋房子(对象A) ,那么 a = A; 那么你拥有这个房子的钥匙(内存地址);如果有一天你有事情,但是你的朋友(b)想去一趟你家,你肯定是给朋友你的钥匙(而不是 直接把你的房子搬给他) ,这样就相当于 b = a;如果有一天你想请朋友©去帮你打扫一下房子,你也是肯定给你朋友钥匙,去你家,而不是复制一个房子给你朋友,(这样的话,朋友平白无故多了一个房子,多开心,在这个年代房子多重要),这样你朋友打扫的房子才是你的房子综上:
引用类型的存在 的原因如下:
1、节省系统内存(这是最主要的)
2、便于后期管理