js变量传递类型
有博客解释:在程序设计中,对于函数调用通常有一下几种方法,可以归纳为 值引用和 地址引用(对象引用), 按地址传递,则传递是原来变量的地址。如果对新变量做修改,那么原来的参数也会跟着变化。
找了很多博客、回答来看,终于成功让我自己混淆了,所以开始好好根据书中介绍来做理解总结。
javascript高级程序设计这本书中介绍,ECMAScript变量可能包含两种不同数据类型的值:基本类型 和 复杂类型,其中,基本类型指的是简单的数据段,引用类型指的是那些可能由多个值构成的对象。⚠️必须注意的是,ECMAScript中所有函数的参数都是按值传递的,也就是说把函数外部的值复制给函数内部的参数,就和把一个变量复制到另一个变量一样。可以这样理解,基本类型值的传递就如同基本类型变量的复制,引用类型值的传递就如同引用类型变量的复制。严格来说,访问变量有按值和按引用两种方式,而参数只能按值传递。
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用 ECMAScript 的概念来讲,就是 argument 对象中的一个元素)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
* 基本数据类型:Undefined、Null、Boolean、Number、String,这5种
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用 ECMAScript 的概念来讲,就是 argument 对象中的一个元素)。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
- 引用类型:其值是保存在内存中的对象 Object
####怎样解释上图现象?
####对象是引用类型的,变量中仅仅保存的是对象的指针,只要对象变量不变化,指针不变化,值都不会发生改变,但是如果需要对象发生改变,则可以从变量的属性入手
####类似地,const定义的变量应该是不可以改变的,但是改变对象的属性却使得对象发生了改变,因此可以得出结论,const保存的变量的指针,只要定义的引用类型指针不发生改变,其他任何形式的改变都是允许的。

浙公网安备 33010602011771号