网站二次开发,怎么下载网站备案号,怎么开彩票网站做站长,抖音网络营销方式定义#xff1a;所有函数的参数都是按值传递的#xff0c;这意味着函数外的值被会被赋值到函数内部的参数中#xff0c;就像从一个变量赋值到另外一个变量一样
**原始值#xff1a;那么久跟原始值变量的复制一样**
**引用值#xff1a;那么久跟引用值复制一样**变量有按值…定义所有函数的参数都是按值传递的这意味着函数外的值被会被赋值到函数内部的参数中就像从一个变量赋值到另外一个变量一样
**原始值那么久跟原始值变量的复制一样**
**引用值那么久跟引用值复制一样**变量有按值和按引用访问而传参只有按值传递
在按值传递参数时值会被复制到一个局部变量即一个命名参数或者用ECMAScript的话说就是arguments对象中的一个槽位在按引用传递参数时只在内存中的位置会被保存在一个局部变量这意味着对本地的变量的修改会反映到函数外部这在ECMASript中是不可能的
例子1值传递 function addTen(num) {num 10return num}let count 20let res addTen(count)console.log(count); // 20console.log(res); //30相当于 let num count 上面的例子幂函数addTen中有一个参数num,它其实是一个局部变量在调用的时候变量count作为参数传入count的值是20这个值被复制到参数num以便在addTen()内部使用在函数内部参数num的值被加上了10但是这并不会影响到原始的变量count,参数num和变量count互不干扰。他们不过碰巧保存了一样的值。
例子2引用传递 function setName(obj) {obj.name nike}let person new Object()setName(person)console.log(person.name); //nike这一次我们吧一个对象保存在变量person中然后这个对象被传给setName在函数内部obj和person都指向同一个对象。结果就是即使对象是按值传递进函数obj也会用过引用访问对象在函数内部给obj设置属性是函数外部对象也会发生变化。因为obj指向的对象保存在全局作用域的堆内存上面所以我们大多数会认为局部作用中修改对象发生变化反映到全局这就意味着参数是按引用传递那么我们在看下面一个例子 function setName(obj) {obj.name nikeobj new Object()obj.name Greg}let person new Object()setName(person)console.log(person.name); //nike我们将obj重新定义为一个有着不同name的新对象如果person是按引用传递person应该自动将指针知道新的对象但是我们再次访问person的时候还是nike,这表明当obj在函数内部重写的时候它变成了一个指向本地对象的指针而那个本地对象在函数执行结束后就被销毁了
注意ECMASript中函数的参数就是局部变量
简单点总结来说函数传参就好像是把传递的参数直接赋值给了函数调用中的变量