javascript兩種function的定義介紹及區別說明

來源:互聯網
上載者:User

一般情況下兩者的調用結果是一樣的,但是還是有區別的。
第一種方式: 複製代碼 代碼如下:function a(){
alert('old');
}
var b=a;
function a(){
b();
alert('new');
}
a();//瀏覽器就會出現記憶體溢出的情況

第二種方式: 複製代碼 代碼如下:function a(){
alert('old');
}
var b=a;
var a=function(){
b();
alert('new');
}
a();//瀏覽器就會按順序alert出‘old'和‘new'

這裡就可以很明顯區分兩個方式的區別了。定義的順序不同。
第一種,剛開始其實沒有重新定義 a 這個function 而在裡面執行了其本身。
第二種方式, a = function () 這裡沒有執行到 function 裡面的代碼 a 已經被重新定義了。所以這裡的重定義是有效
補充1: 複製代碼 代碼如下:function a(){
alert('old');
}
var b=a;
function a(){
b();
alert('new');
}

編譯時間: 首先a被定義為alert("old"), 接著又被定義成b();alert("new");
運行時: b = function a(){b();alert("new");}, 此時b和a一樣, 函數體中直接調用b, 無論從a調用還是從b調用結果都一樣, 產生堆疊溢位
另一方面 複製代碼 代碼如下:function a(){
alert('old');
}
var b=a;
var a=function(){
b();
alert('new');
}

編譯時間: a被定義為alert("old")
運行時: b=function a(){alert("old")}; a=function(){b();alert("new")}; 此時b的函數體中不包括ab中任何一個, a只調用b... 無論怎樣都不會產生堆疊溢位...
補充2:
一般來說,都會用第一種的寫法來避免代碼汙染,但如果你需要保留原function,就要用第二種寫法,反正兩種方法都是符合w3c的。
事實上第一種寫法是後來才有的,這種寫法是經過最佳化的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.