js函數(shù)傳參類(lèi)型

聲明:本文就前兩天學(xué)習(xí)的 javascript函數(shù),傳參方式進(jìn)行筆記;

1.按值傳遞

當(dāng)js函數(shù)的參數(shù)是基本數(shù)據(jù)類(lèi)型時(shí),當(dāng)調(diào)用方法時(shí)傳入的是一個(gè)數(shù)值;也就是說(shuō) 僅僅是把值給了這個(gè)方法,在這個(gè)方法中改變,重新賦值都不會(huì)改變方法外邊的全局變量;

代碼如下:

按值傳遞

理解:num變量實(shí)際上實(shí)在方法add中聲明的,只在add方法這個(gè)作用域內(nèi)有效,調(diào)用方法時(shí),只是復(fù)制了一份相同的值給了num,方法內(nèi)不管發(fā)生什么,和方法外界沒(méi)有任何關(guān)系;所以這叫按值傳遞;

2.共享傳遞

當(dāng)函數(shù)的參數(shù)是引用數(shù)據(jù)類(lèi)型時(shí),調(diào)用方法時(shí),參數(shù)傳遞方式為共享傳遞——傳遞的是實(shí)參的地址拷貝;先看現(xiàn)象:

共享傳遞

注意:在方法中添加屬性name改變了外部變量person的屬性,but,,,在方法中重新new一個(gè)對(duì)象,卻沒(méi)有改變外部變量;這對(duì)理解會(huì)造成一個(gè)困惑;一部分人認(rèn)為它是按值傳遞的;那么obj.name = "Bob"卻能改變外部屬性?還有一部分人認(rèn)為是按引用傳遞的,那么當(dāng)給它重新賦值時(shí),引用應(yīng)該指向新的變量,但是并沒(méi)有;

理解:共享傳遞實(shí)際上傳遞的是,外部變量的引用拷貝,注意是拷貝哦,ok,如此這樣,你用這個(gè)拷貝來(lái)的引用去改變外部變量的內(nèi)部屬性,沒(méi)問(wèn)題,可以成功,but,,,如果你直接新創(chuàng)建一個(gè)對(duì)象給它,并不影響外部變量,只是將該拷貝來(lái)的引用變了,而且,方法一調(diào)用完畢,都會(huì)當(dāng)作垃圾回收;

arguments

但是在方法內(nèi)部,若使用argumentts[0] = {name:"kanda" }這樣的字段去改變參數(shù),結(jié)果會(huì)發(fā)生什么?

事實(shí)證明,arguments和應(yīng)該使用一個(gè)引用,但是他們不回改變外部變量的引用;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容