JS—匿名函數(shù)與命名函數(shù)

鏈接,我之前做的兩篇筆記js變量作用域,里面提到定義函數(shù)的不同方式,導(dǎo)致的變量聲明提升問題。還有這篇js特殊的對(duì)象函數(shù)。


  • 命名函數(shù)與匿名函數(shù)
  • 以函數(shù)聲明的方式聲明命名函數(shù)
    function f1(){
    alert(1)
    }
  • 以函數(shù)表達(dá)式的方式聲明匿名函數(shù)
    var f5=function(){
    alert(f5);
    }
  • 判斷是否為匿名函數(shù)
    FireFox、Safari、Chrome、Opera都給函數(shù)定義了一個(gè)非標(biāo)準(zhǔn)的name屬性。
    alert(f1.name);//f1
    alert(f5.name);//""
    但是IE不支持這個(gè)屬性。
  • 函數(shù)聲明提升
    之前寫變量聲明提升時(shí),寫的有有關(guān)函數(shù)部分的聲明提升,有問題,不過(guò)已經(jīng)更正了。
    var met=true;
    if(met){
    function f3(){
    alert(3);
    }
    }
    else{
    function f2(){
    alert(2)
    }
    }
    f2();//2
    f3();//3
    觀察上述代碼,初衷是希望根據(jù)met的值的情況來(lái)選擇函數(shù)定義。
    但是在if語(yǔ)句結(jié)束后,發(fā)現(xiàn)兩個(gè)函數(shù)均可以被調(diào)用。
    var met=true;
    var ff;
    if(met){
    ff=function(){
    alert(3);
    }
    }
    else{
    ff=function(){
    alert(2)
    }
    }
    ff();//3
    使用函數(shù)表達(dá)式的方式,卻很好的實(shí)現(xiàn)了函數(shù)初衷。
    【結(jié)論】第一段代碼函數(shù)聲明提升后的效果為:
    var met=true;
    function f3(){
    alert(3);};
    function f2(){
    alert(2)
    };
    if(met){}
    else{}
    f2();//2
    f3();//3
    會(huì)發(fā)現(xiàn),if語(yǔ)句根本沒有起到作用。
  • 函數(shù)可以被刪除么?
  • 函數(shù)的刪除
    這篇文章說(shuō)的很細(xì)。
    delete操作符通常用來(lái)刪除對(duì)象的屬性,但是卻不能刪除變量,也不能刪除函數(shù)。
    function f1(){
    alert(1)
    }
    alert(delete f1);//false
    刪除不成功則會(huì)返回false。
    var met=true;
    alert(delete met);//false
    同理變量也是這樣。
    var obj={
    name:"du",
    age:19
    }
    alert(delete obj.name);//true
    但是對(duì)象屬性卻可以。
  • 指向空指針
    function f1(){
    alert(1)
    }
    var f6=f1;
    f1=null;
    f6();//1
    f1();//error
    將函數(shù)f1復(fù)制給f6,這時(shí)f6與f1都指向這個(gè)函數(shù),此時(shí)讓f1指向null,那么此時(shí)引用這個(gè)函數(shù)的引用類型變量只有f6。
    問題】函數(shù)不能被刪除,那么如果這個(gè)函數(shù)不用了,他占得內(nèi)存怎么釋放?
    js有一種內(nèi)存清理機(jī)制,是可以根據(jù)函數(shù)在一段時(shí)間內(nèi)被引用的次數(shù)來(lái)決定是否清理該函數(shù)對(duì)象所占的內(nèi)存。
    也就是說(shuō)如果此時(shí)已經(jīng)沒有一個(gè)引用類型變量引用此函數(shù),那么這個(gè)函數(shù)也就不可能再被引用,也就可能會(huì)被js釋放這個(gè)函數(shù)對(duì)象所占內(nèi)存。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語(yǔ)言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,759評(píng)論 0 6
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 8,118評(píng)論 2 17
  • 閉包(closure)是Javascript語(yǔ)言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zock閱讀 1,118評(píng)論 2 6
  • 《ijs》速成開發(fā)手冊(cè)3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,638評(píng)論 0 7
  • 烏云是我對(duì)冬天最直觀的感受了,暗白色的天空,怎么也讓人喜歡不起來(lái)。持續(xù)的溫暖陽(yáng)光只存在于小時(shí)候。(寫到這里我此刻的...
    d4386ec32d61閱讀 543評(píng)論 0 0

友情鏈接更多精彩內(nèi)容