国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 22:45:20
字體:
來源:轉載
供稿:網友
一般情況下兩者的調用結果是一樣的,但是還是有區別的。
第一種方式:
復制代碼 代碼如下:

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的。
事實上第一種寫法是后來才有的,這種寫法是經過優化的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遵义县| 临沧市| 禄劝| 那坡县| 伊川县| 格尔木市| 刚察县| 洱源县| 浦北县| 阜新市| 民县| 云梦县| 麻江县| 达日县| 都昌县| 安丘市| 全州县| 米易县| 从化市| 凤台县| 苗栗市| 青川县| 屯门区| 荃湾区| 昭平县| 临江市| 铜鼓县| 高淳县| 龙山县| 寻甸| 宝清县| 漠河县| 印江| 松潘县| 罗田县| 文安县| 婺源县| 屏东县| 松原市| 长治市| 汝州市|