出处:JavaScript高级程序设计(第三版)第四章——变量、作用域和内存问题
一句话总结
JS的方法参数是按值传递
的
前提
ES变量分为两种数据类型
的值:基本类型和引用类型
基本类型存储
基本类型的值在申请内存时是固定大小,所以保存在栈内存
,故在复制基本类型变量时也是在栈内存中新开辟一份内存空间进行存储
引用类型存储
而引用类型变量的值大小不固定,且可任意改动,引用类型变量的本质是指向某一块内存区域的指针变量,故引用类型变量存储在内存自由分配的堆内存
中,在对引用变量作直接复制(重新赋值)时也只是将新的变量指向相同的一片内存区域(即两个指针指向同一片堆内存空间)
引用类型探析
引用类型的值是存放在内存中的对象
,但由于JS语言不允许直接访问内存
中的位置(即不能直接操作对象的内存空间),故操作对象时实际是在操作对象的引用
,而不是直接操作实际的对象本身(即引用类型的值是按引用
访问的,这个引用可以理解为对象的句柄)
特别地
很多语言对于字符串是以对象形式进行表示,故为引用类型变量,但ES不是