我們現在來理解下函數引用和函數調用的本質區別:當引用函數時候,多個變量內存存儲的是函數的相同的入口指針,因此對於同一個函數來講,無論多少個變量引用,他們都是相等的,因為對於引用類型(對象,數組,函數等)都是比較的是內存地址,如果他們內存地址一樣的話,說明是相同的;但是對於函數調用來講,比如代碼三;每次調用的時候,都被分配一個新的內存地址,所以他們的內存地址不相同,因此他們會返回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++的傳值和傳引用。