大家都知道Javascript 有兩個種定義Function的方法非常常用。例如
function a(){alert("a")}
var a = function(){alert("a")}
雖然兩個種方式定義出來的 function 調用的時候結果一樣,但是中間還是有區別的。舉個簡單的例子,假如我們要重定義 a() ,而且新的方法要繼承 a() 裡面所有方法並且進行其他擴展的話。就可以明顯看到這兩個方式的區別了。
1. 首先,我們先建立一個臨時的變量來存儲 a()
var b = a;
然後,重新定義a()
第一種方式:
function a(){
b();
alert("ok");
}
第二種方式:
a = function(){
b();
alert("ok");
}
這是大家可以嘗試發現。第一種方式重新定義的 a() 會出現堆棧溢出的錯誤。而第二種方式卻成功保留了原來 a() 所執行的腳本,成功 alert 出了 "a" "ok" 的字樣,說明 a() 的方法被重定義了。
這裡就可以很明顯區分兩個方式的區別了。定義的順序不同。
第一種,剛開始其實沒有重新定義 a 這個function 而在裡面執行了其本身。
第二種方式, a = function () 這裡沒有執行到 function 裡面的代碼 a 已經被重新定義了。所以這裡的重定義是有效的。