成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

高級(jí)程序設(shè)計(jì):第7章-函數(shù)表達(dá)式

boredream / 1906人閱讀

摘要:函數(shù)體創(chuàng)建一個(gè)函數(shù)并將它賦值給變量創(chuàng)建的函數(shù)叫做匿名函數(shù)因?yàn)殛P(guān)鍵字后面沒(méi)有標(biāo)識(shí)符??梢允褂妹瘮?shù)表達(dá)式來(lái)達(dá)到相同的結(jié)果。不過(guò)匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向如果在通過(guò)或改變函數(shù)執(zhí)行環(huán)境的情況下,就會(huì)指向其它對(duì)象。

函數(shù)表達(dá)式

函數(shù)表達(dá)式是JavaScript中的一個(gè)既強(qiáng)大又容易令人困惑的特性。

定義函數(shù)表達(dá)式的方法

1.函數(shù)聲明

function functionName(arg0,arg1,arg2){
    //函數(shù)體
}

先有function關(guān)鍵字,然后是函數(shù)的名字,就是指定函數(shù)名的方式。他還有一個(gè)重要特征就是函數(shù)聲明提升意思是在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明。(意味可以將函數(shù)聲明放在調(diào)用它的語(yǔ)句后面)如下:

sayHi()
function sayHi(){
    alert("Hi!");
}

2.函數(shù)表達(dá)式

函數(shù)表達(dá)式有幾種不同的語(yǔ)法形式,下面是最常見(jiàn)的一種。

var functionName=function(arg0,arg1,arg2){
    //函數(shù)體
}

創(chuàng)建一個(gè)函數(shù)并將它賦值給變量functionName,創(chuàng)建的函數(shù)叫做匿名函數(shù),因?yàn)閒unction關(guān)鍵字后面沒(méi)有標(biāo)識(shí)符。(匿名函數(shù)也叫做拉姆達(dá)函數(shù)) 匿名函數(shù)的name屬性是空字符串。

遞歸

遞歸函數(shù)是在一個(gè)函數(shù)通過(guò)名字調(diào)用自身的情況下構(gòu)成的如下:

function factorial(num){
    if(num<=1){
        return 1;
    }else{
        return num*factorial(num-1);
    }
}

1.arguments.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針,因此可以用來(lái)實(shí)現(xiàn)對(duì)
函數(shù)的遞歸調(diào)用如下:

function factorial(num){
    if(num<=1){
        return 1;
    }else{
        return num*arguments.callee(num-1);
    }
}

用arguments.callee代替函數(shù)名,可以確保無(wú)論怎樣調(diào)用函數(shù)都不會(huì)出問(wèn)題。但是在嚴(yán)格模式下訪問(wèn)arguments.callee屬性會(huì)出錯(cuò)??梢允褂妹瘮?shù)表達(dá)式來(lái)達(dá)到相同的結(jié)果。如下:

var factorial=(function f(num){
    if(num<=1){
        return 1;
    }else{
        return num*f(num-1);
    }
}

這種方式在嚴(yán)格模式和非嚴(yán)格模式都可以使用。

閉包

閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量的函數(shù),創(chuàng)建閉包的常見(jiàn)方式,就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。如下:

function init(){
    var name="Mike";
    function displayName(){
        alert(name);
    }
    displayName();
}
init()

init()函數(shù)創(chuàng)建了一個(gè)局部變量name和一個(gè)名為displayName()的函數(shù)。displayName()函數(shù)是定義在init()里面的內(nèi)部函數(shù),僅在該函數(shù)體內(nèi)使用。
displayName()沒(méi)有自己的局部變量,然而它可以訪問(wèn)到外部函數(shù)的變量,所以displayName()可以使用父函數(shù)init()中聲明的變量name。

注意:由于閉包會(huì)攜帶它的函數(shù)作用域,因此會(huì)比其它函數(shù)占用更多內(nèi)存。過(guò)度使用閉包可能會(huì)導(dǎo)致內(nèi)存占用過(guò)多。
this

在全局函數(shù)中,this等于window,而當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),this等于那個(gè)對(duì)象。不過(guò)匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其this對(duì)象通常指向window

如果在通過(guò)call()或apply()改變函數(shù)執(zhí)行環(huán)境的情況下,this就會(huì)指向其它對(duì)象。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105196.html

相關(guān)文章

  • 如何正確學(xué)習(xí)JavaScript

    摘要:然而,雖然先生對(duì)無(wú)所不知,被譽(yù)為世界的愛(ài)因斯坦,但他的語(yǔ)言精粹并不適合初學(xué)者學(xué)習(xí)。即便如此,在后面我還是會(huì)建議把當(dāng)做補(bǔ)充的學(xué)習(xí)資源。但目前為止,依然是學(xué)習(xí)編程的好幫手。周正則表達(dá)式,對(duì)象,事件,閱讀權(quán)威指南第,,,章。 既然你找到這篇文章來(lái),說(shuō)明你是真心想學(xué)好JavaScript的。你沒(méi)有想錯(cuò),當(dāng)今如果要開(kāi)發(fā)現(xiàn)代網(wǎng)站或web應(yīng)用(包括互聯(lián)網(wǎng)創(chuàng)業(yè)),都要學(xué)會(huì)JavaScript。而面對(duì)泛...

    canger 評(píng)論0 收藏0
  • [譯] 如何恰當(dāng)?shù)貙W(xué)習(xí) JavaScript

    摘要:原文鏈接恰當(dāng)?shù)貙W(xué)習(xí)適合第一次編程和非的程序員持續(xù)時(shí)間到周前提無(wú)需編程經(jīng)驗(yàn)繼續(xù)下面的課程。如果你沒(méi)有足夠的時(shí)間在周內(nèi)完成全部的章節(jié),學(xué)習(xí)時(shí)間盡力不要超過(guò)周。你還不是一個(gè)絕地武士,必須持續(xù)使用你最新學(xué)到的知識(shí)和技能,盡可能地經(jīng)常持續(xù)學(xué)習(xí)和提高。 原文鏈接:How to Learn JavaScript Properly 恰當(dāng)?shù)貙W(xué)習(xí) JavaScript (適合第一次編程和非 JavaSc...

    Jason 評(píng)論0 收藏0
  • 《JavaScript高級(jí)程序設(shè)計(jì)》(3版)讀書(shū)筆記 7 函數(shù)達(dá)式

    摘要:定義函數(shù)表達(dá)式的方式有兩種函數(shù)聲明。不過(guò),這并不是匿名函數(shù)唯一的用途。可以使用命名函數(shù)表達(dá)式來(lái)達(dá)成相同的結(jié)果閉包匿名函數(shù)和閉包是兩個(gè)概念,容易混淆。匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向通過(guò)改變函數(shù)的執(zhí)行環(huán)境的情況除外。 定義函數(shù)表達(dá)式的方式有兩種: 函數(shù)聲明。它的重要特征就是 函數(shù)聲明提升(function declaration hoisting) 即在執(zhí)行代碼之前會(huì)...

    鄒立鵬 評(píng)論0 收藏0
  • 《JavaScript高級(jí)程序設(shè)計(jì)》(3版)讀書(shū)筆記 4 變量、作用域和內(nèi)存問(wèn)題

    摘要:具體說(shuō)就是執(zhí)行流進(jìn)入下列任何一個(gè)語(yǔ)句時(shí),作用域鏈就會(huì)得到加長(zhǎng)語(yǔ)句的塊。如果局部環(huán)境中存在著同名的標(biāo)識(shí)符,就不會(huì)使用位于父環(huán)境中的標(biāo)識(shí)符訪問(wèn)局部變量要比訪問(wèn)全局變量更快,因?yàn)椴挥孟蛏纤阉髯饔糜蜴湣? 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...

    lidashuang 評(píng)論0 收藏0
  • 我的開(kāi)源 GitBook: Python 之旅

    摘要:我在寫(xiě)作的過(guò)程中,給自己提了一個(gè)要求盡量深入淺出,條理清晰。至于是否達(dá)到了,希望讀者們多多批評(píng)指正,并給我提意見(jiàn)和建議。第章介紹中的函數(shù)式編程,包括匿名函數(shù)閉包和裝飾器等。第章介紹使用處理進(jìn)程線程和協(xié)程。 showImg(https://segmentfault.com/img/remote/1460000007990784?w=268&h=385); 在學(xué)習(xí)和使用 Python 的過(guò)...

    趙連江 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

boredream

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<