在js调用函数时传递变量参数时, 是值传递还是引用传递?

在JavaScript里调用函数传参的时候,经常对到底是参数是值传递还是引用传递混淆,这里来简单的验证下到底是怎么一回事。

首先我们得区分一下JS中栈和堆里存储的数据的区别,栈内存中主要存储的是一些基本类型的变量,而堆内存中存储的则是对象类型。引用类型的对象在堆中存储,而地址在栈中存储。

在js调用函数时传递变量参数时, 是值传递还是引用传递?_第1张图片

在函数传参的时候实际上是做了两个步骤,先从栈中获取实参对象的值,然后做一个赋值操作,将值赋给形参。在获取基本类型的时候,是从栈中取得基本类型的值,而获取对象类型的时候,从栈中得到的是这个对象类型所指向的地址,然后由这个地址去堆中寻找到对象内属性的值。

在js调用函数时传递变量参数时, 是值传递还是引用传递?_第2张图片

(上图是在浏览器中运行的结果)

    所以,对这个问题可以有着两种理解,第一种则是理解为两个都是值传递,只是这个值可以是基本数据,也可以是地址数据。第二种则是把传递的地址值看作是引用传递,不过一般来说都当做是值传递。

你可能感兴趣的:(JavaScript,JavaScript,值传递和引用传递)