【JS】函数调用时,传参分为传值和传址

352 阅读1分钟

传参时是传值(复制值)给形参

首先,定义了一个函数let add = (a,b)=> a+b

  • 那么我们调用这个函数add(1,2)的时候,我们会传参,也就是把实参1和2传给(复制给)形参a和b。
  • 因为我们的实参1和2就是数据类型中的数值,所以传参后形参a和b的值也就是数据类型中的数值,所以形参a和b将会被存在stack栈里,形参a=1,b=2。就是单纯的等于一个数字!

传参时是传址(复制地址)给形参

其次,我们在定义一个函数let add = (array,a)=> array.push(a)

  • 那么我们调用这个函数add([1,2],3)的时候,我们会传参,也就是把实参[1,2]3传给(复制给)形参arraya

  • 因为我们的实参[1,2]3一个是数据类型中的对象的数组,一个是数组,所以传参后形参arraya也就是数组和数值。数组的话实在stack栈里保存一个地址,这个地址就是实参[1,2]的地址啊!所以形参array和实参[1,2]是同一块内存啊

  • 所以,调用函数后,就会传参,然后你往array里面push新东西,也就是往[1,2]里push新东西!