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