javascript函式的形參與實參

2021-08-21 21:38:34 字數 1312 閱讀 9729

形參,是在定義函式時使用的引數,目的是用來接收呼叫該函式時傳進來的實際引數。 

實參:是在呼叫時傳遞給函式的引數 

例如

function myfun(a,b,c)

myfun(1,2,3);

這裡a,b,c就是形參。1,2,3為實參。 

形參和實參是不同的變數,他們在記憶體中處於不同的位置,形參在函式執行結束時將被釋放。

主要有兩點需要注意的

1 . 如果實參是引用型別(object,array等),那麼對相對的形參進行更改,是否會影響到實參的值

var obj = 

function myfunc(objtemp)

myfunc(obj);

alert(obj.name); //func

那麼最後一句:alert(obj.name);會輸出什麼呢,答案是func。 

函式引數傳遞包含兩種方式:值傳遞和引用傳遞。 

值傳遞:形參是實參值的乙個副本,對形參的改變不會影響實參 

引用傳遞:形參實際上是對實參引用變數的複製,導致這實參、形參都指向同乙個物件實體。形參改變會同時改變實參的值。 

可以這樣理解:myfunc(obj);可以看作是

objtemp = obj;

objtemp.name = 'func';

alert(objtemp.age);

舉例說明:

var arr= ['obj1','obj2','obj3']

function myfunc(arrtemp)

myfunc(arr); //obj1,myfunc,obj3

alert(arr[1]); //myfunc

2 . 形參與區域性變數重名情況的處理。

function myfunc(a)

myfunc("hello");

由於「變數宣告提公升」,當執行到第乙個alert(a)時,形參a已經存在。區域性變數a只宣告而未賦值,記憶體中還未建立區域性變數a。這時候alert(a),a 表示形參,所以輸出「hello」。 

執行var a = a+』world』;時,右邊的a是形參,左邊的a是區域性變數。這兩個a互不干擾。但這一句執行完成後,區域性變數a已經覆蓋了形參a。所以後面的b=a時,a為區域性變數。

綜合來說,當區域性變數未宣告或只宣告而未賦值時,記憶體中還沒有這個變數,這時候呼叫的同名變數是形參。當區域性變數賦值完成後,記憶體中已經存在這個變數,並且覆蓋了同名的形參。後面再呼叫該變數時,就指的的區域性變數了。 

C 函式的形參

這些天又在複習c 溫故知新,每次看書都會發現一些之前被自己忽視掉的知識點,所以,學習是不能止步的!作為一種程式語言,c 最重要的兩個部分就是函式和變數,這兩者之間進行溝通便是通過引數傳遞,而引數傳遞有很多需要注意的細節,今天就來講講引數傳遞的問題。總的來說,引數傳遞的過程,就是初始化函式形參的過程。...

函式指標形參

一 在介紹指標形參之前,先簡要說明下兩個運算子 和 1 取址運算子 用來取得其運算元的位址。取址運算子的運算元必須是在記憶體中可定址到。換句話說,該運算子只能用作函式或物件 例如左值 而不可以用於位欄位,以及那些未被儲存型別修飾符register宣告的內容。float x,ptr ptr x 合法 ...

函式形參 內聯函式

1.形參帶預設值的函式 1.給預設值,需要從右向左給,壓棧的時候從右向左壓。int sum int a 10,int b 這樣是錯誤的2.給預設值呼叫效率高 因為呼叫時給值,h彙編會直接壓棧,如果是給變數值,還需要多一條move指令,需要從記憶體中取值到暫存器,再壓棧。3.定義可以給形參預設值,宣告...