1. 程式人生 > >函式引用和函式呼叫的區別

函式引用和函式呼叫的區別

我們現在來理解下函式引用和函式呼叫的本質區別:當引用函式時候,多個變數記憶體儲存的是函式的相同的入口指標,因此對於同一個函式來講,無論多少個變數引用,他們都是相等的,因為對於引用型別(物件,陣列,函式等)都是比較的是記憶體地址,如果他們記憶體地址一樣的話,說明是相同的;但是對於函式呼叫來講,比如程式碼三;每次呼叫的時候,都被分配一個新的記憶體地址,所以他們的記憶體地址不相同,因此他們會返回false,但是對於程式碼二來講,我們看到他們沒有返回函式,只是返回數值,他們比較的不是記憶體地址,而是比較值,所以他們的值相等,因此他們也返回true,我們也可以看看如下實列化一個物件的列子,他們也被分配到不同的記憶體地址,因此他們也是返回false的;如下程式碼測試:

function F(){
this.x = 5;
}
var a = new F();
var b = new F();
console.log(a === b); // false

函式與一般變數的差異,在於如何使用資料。與函式相關的資料(或程式碼)可被執行。想執行函式時,就在函式名稱後加上括號(),如果函式需要自變數,也要記得附加上。

函式變數的值不是程式碼本身,而是指向儲存程式碼的儲存器位置的引用。

回撥函式。 簡單理解就是:函式a有一個引數,這個引數是個函式b,當函式a執行完以後執行函式b。那麼這個過程就叫回調。
---------------------

在C語言或其他大部分語言中,當函式return了之後,函式內部申明的變數將被銷燬,因為函式內部的變數是在棧上的,棧會隨著函式的退出而銷燬,如果不理解的,可以去研究下C++的傳值和傳引用。