如何理解JavaScript访问变量有按值和按引用两种方式 这句话

JavaScript高级程序设计4.1.3(170页)中有这么一句话:访问变量有按值和按引用两种方式。
这句话怎么理解?什么是按值?什么是按引用?

阅读 3.2k
4 个回答

JavaScript和Java的内存管理类似,存放数据的地方都是栈(数值)和堆(引用);
基本类型和引用类型的主要区别是基本类型在内存中的大小固定、生存期确定,引用类型则是动态分配的、生存期不确定;
基本类型在作用域执行完后立即释放,引用类型则再没有变量引用时,系统的垃圾回收机制才会在合适的时候(回收算法)回收它;
JavaScript基本数据类型Undefined、Null、Boolean、Number 和String

首先你得知道什么是原始类型,什么是引用类型

  • 原始(基本)类型:number, string, boolean, null, undefined, NaN 存放在栈中(空间小但是效率高)

  • 引用(对象)类型:object, function 存放在堆中(空间大但是效率低)

传值

  • 原始类型简单所以按值传递

  • 引用类型比较复杂一般传递的是堆地址

按值访问对于基本类型而言,不同变量指向的地址空间都是不同的,即使把一个变量赋值给另一个变量,接收到时变量指向的内容而不是内存地址;
按引用访问对于对象类型而言,不同的变量指向的地址空间可能是相同的,当一个变量赋值给另一个变量时,接收到的变量的地址,而不是内容;

实际上处理的都是"值",只是这个"值"对于不同的变量类型有不同的含义

clipboard.png
按引用的例子

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题