Javascript函數形參與實參__區塊鏈

來源:互聯網
上載者:User

形參,是在定義函數時使用的參數,目的是用來接收調用該函數時傳進來的實際參數。
實參:是在調用時傳遞給函數的參數
例如

function myfun(a,b,c){    ...  }myfun(1,2,3);

這裡a,b,c就是形參。1,2,3為實參。
形參和實參是不同的變數,他們在記憶體中處於不同的位置,形參在函數運行結束時將被釋放。

主要有兩點需要注意的

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

var obj = {    name:'obj',    age:12}function myfunc(objtemp){    objtemp.name='func';    alert(objtemp.age); //12}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){    arrtemp[1] = 'myfunc';    alert(arrtemp);  }myfunc(arr);  //obj1,myfunc,obj3alert(arr[1]); //myfunc

2 . 形參與局部變數重名情況的處理。

function myfunc(a){    alert(a);        //hello    var a = a+'world';    var b = a;     alert(a);        //helloworld    alert(b);        //helloworld}myfunc("hello");

由於“變數聲明提升”,當執行到第一個alert(a)時,形參a已經存在。局部變數a只聲明而未賦值,記憶體中還未建立局部變數a。這時候alert(a),a 表示形參,所以輸出“hello”。
執行var a = a+’world’;時,右邊的a是形參,左邊的a是局部變數。這兩個a互不干擾。但這一句執行完成後,局部變數a已經覆蓋了形參a。所以後面的b=a時,a為局部變數。

綜合來說,當局部變數未聲明或只聲明而未賦值時,記憶體中還沒有這個變數,這時候調用的同名變數是形參。當局部變數賦值完成後,記憶體中已經存在這個變數,並且覆蓋了同名的形參。後面再調用該變數時,就指的的局部變數了。
舉例:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.