js中函式的引數傳遞方式

2021-09-29 19:01:25 字數 1389 閱讀 2056

js中函式的引數傳遞方式

ecmascript中所有函式的引數都是按值傳遞的。

也就是說,把函式外部的值複製給函式內部的引數,就和把值從乙個變數複製到另乙個變數一樣。

向引數傳遞基本型別值

傳遞乙個基本型別值時,被傳遞的值會被復給乙個區域性變數(arguments中的乙個元素)

function

add(num)

var count =20;

var res =

add(count)

;console.

log(count)

;//20

console.

log(res)

;//30

變數count作為引數傳遞給函式,在函式內部,引數num被加10,但是這一變化不會影響函式外部的count變數。

向引數傳遞引用型別值

傳遞乙個引用型別值時,會把這個值在堆記憶體中的位址複製給乙個區域性變數,因此這個區域性變數的變化會反映在函式的外部。

function

setname

(obj)

var person =

newobject()

;setname

(person)

;console.

log(person.name)

;// hello

以上**建立了乙個物件,並將其儲存在了變數person中,這個物件被傳遞到了setname函式中被複製給了obj。在函式內部,obj和person引用的是同乙個物件,於是在函式內部為obj新增乙個name屬性後,外部的person也會有所反應,因為person指向的物件在記憶體中只有乙個,而且是全域性物件。

但是函式的引數並不是按引用傳遞的,而是按值傳遞的。

function

setname

(obj)

var person =

newobject()

;setname

(person)

;console.

log(person.name)

;// hello

以上**中,在把person傳遞給setname函式後,其name屬性被設定為『hello』。然後,又將乙個新的物件賦值給obj,同時將其name設定為『world』的新物件。但是,接下來再訪問person.name時,顯示的仍然是『hello『,這說明即使在函式內部修改了引數的值,但是原始的引用仍然不變。

實際上,當在函式內部重寫obj時,這個變數的引用就是乙個區域性變數了,而這個區域性變數會在函式執行完畢後立即被銷毀。

js引數傳遞方式

是最常用的求值策略 函式的形參是被呼叫時所傳實參的副本。修改形參的值並不會影響實參。函式的形參接收實參的隱式引用,而不再是副本。這意味著函式形參的值如果被修改,實參也會被修改。同時兩者指向相同的值。按引用傳遞會使函式呼叫的追蹤更加困難,有時也會引起一些微妙的bug。按值傳遞由於每次都需要轉殖副本,對...

js中的函式引數傳遞原則

js中函式引數值傳遞和引用傳遞 一.函式傳遞值型別 例項如下 function addnum num var num 10 var result addnum num console.log num console.log result 以上 的彈出值分別為 10和20,下面進行一下分析 宣告變數n...

函式引數傳遞的方式

按值傳遞 主調函式向呼叫函式傳遞引數實際上只是將實參的拷貝 即臨時副本 傳遞給了被呼叫函式,並不是實參本身,這樣被調函式不能直接修改主調函式中變數的值,而只能修改其私有的臨時副本的值。引用傳遞 對引用的操作等於對其指定的物件進行操作,當將實參傳遞給形參時,形參就指向了實參 指標傳遞 形參為指向實參位...