JavaScript Function 函數(shù)深入總結(jié)

JavaScript Function 函數(shù)深入總結(jié)

ID:42562963

大?。?34.81 KB

頁數(shù):43頁

時(shí)間:2019-09-17

JavaScript Function 函數(shù)深入總結(jié)_第1頁
JavaScript Function 函數(shù)深入總結(jié)_第2頁
JavaScript Function 函數(shù)深入總結(jié)_第3頁
JavaScript Function 函數(shù)深入總結(jié)_第4頁
JavaScript Function 函數(shù)深入總結(jié)_第5頁
資源描述:

《JavaScript Function 函數(shù)深入總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、整理了JavaScript中函數(shù)Function的各種,感覺函數(shù)就是一大對(duì)象啊,各種知識(shí)點(diǎn)都能牽扯進(jìn)來,不單單是?Function?這個(gè)本身原生的引用類型的各種用法,還包含執(zhí)行環(huán)境,作用域,閉包,上下文,私有變量等知識(shí)點(diǎn)的深入理解。函數(shù)中的return1.?return?語句可以不帶有任何返回值,在這種情況下(?return;?或函數(shù)中不含?return?語句時(shí)),函數(shù)在停止執(zhí)行后將返回?undefiend?值。這種用法一般在需要提前停止函數(shù)執(zhí)行而又不需要返回值的情況下。2.?return?false?可

2、以阻止元素的默認(rèn)事件。3.?return?返回的是其所在函數(shù)的返回值4.functionn(){5.(function(){6.return5;7.})();8.}9.n();//undefined10.//立即執(zhí)行匿名函數(shù)中的return語句其實(shí)是返回給它所在的匿名函數(shù)的。11.12.functionn(){13.varnum=(function(){14.return5;15.})();16.console.log(num);}Function類型函數(shù)實(shí)際上是對(duì)象,每個(gè)函數(shù)實(shí)際上都是?Function

3、?類型的實(shí)例。而且與其他引用類型一樣具有屬性和方法。函數(shù)名實(shí)際上是一個(gè)指向內(nèi)存堆中某個(gè)函數(shù)對(duì)象的指針。定義函數(shù)的方式1.函數(shù)聲明2.functionsum(num1,num2){3.returnnum1+num2;}4.函數(shù)表達(dá)式5.varsum=function(num1,num2){6.returnnum1+num2;};定義了一個(gè)變量?sum?并將其初始化為一個(gè)函數(shù),注意到?function?關(guān)鍵字后面并沒有函數(shù)名,這是因?yàn)樵谑褂煤瘮?shù)表達(dá)式定義函數(shù),沒必要使用函數(shù)名,通過變量?sum?即可引用函數(shù)。

4、還要注意函數(shù)末尾有個(gè)分號(hào),就像聲明其他變量一樣。7.?new?構(gòu)造函數(shù),雖然這種用法也是函數(shù)表達(dá)式,但該用法不推薦。因?yàn)檫@種語法會(huì)導(dǎo)致解析兩次代碼(第一次是解析常規(guī)的ECMAScript代碼,第二次是解析傳入構(gòu)造函數(shù)中的字符串),影響性能。使用?Function?構(gòu)造函數(shù),構(gòu)造函數(shù)可以接受任意數(shù)量的參數(shù),但最后一個(gè)參數(shù)始終都被看成是函數(shù)體,前面的參數(shù)則枚舉出了新函數(shù)的參數(shù)。1.varsum=newFunction('num1','num2','returnnum1+num2;');2.sum;//3.fu

5、nctionanonymous(num1,num24./**/){5.returnnum1+num2;}當(dāng)使用不帶圓括號(hào)的函數(shù)名是訪問函數(shù)指針,而非調(diào)用函數(shù)。理解參數(shù)ECMAScript中所有參數(shù)傳遞的都是值(即使是引用也是傳遞的地址值,不是引用傳遞參數(shù)(可參考JavaScript傳遞參數(shù)是按值傳遞還是按引用傳遞))。ECMAScript函數(shù)不介意傳遞進(jìn)來多少個(gè)參數(shù),也不在乎傳進(jìn)來的參數(shù)是什么數(shù)據(jù)類型。之所以這樣,是因?yàn)镋CMAScript中的參數(shù)在內(nèi)部是用一個(gè)數(shù)組表示的。函數(shù)接收到的始終都是這個(gè)數(shù)組,而

6、不關(guān)心數(shù)組中包含哪些參數(shù)。在函數(shù)體內(nèi),可以通過?arguments?對(duì)象來訪問這個(gè)數(shù)組。從而獲取傳遞給函數(shù)的每個(gè)參數(shù)。functionfunc(){console.log(Object.prototype.toString.call(arguments));}func();//[objectArguments]1.關(guān)于?arguments?的行為,它的值永遠(yuǎn)與對(duì)應(yīng)命名參數(shù)的值保持同步。因?yàn)?arguments?對(duì)象中的值會(huì)自動(dòng)反映到對(duì)應(yīng)的命名參數(shù)。所以修改?arguments[1]?,也就修改了?num2

7、?。不過這并不是說讀取這兩個(gè)值會(huì)訪問相同的內(nèi)存空間,它們的內(nèi)存空間是獨(dú)立的,但他們值會(huì)同步(WHY??),要是JavaScript能直接訪問內(nèi)存就好了驗(yàn)證一下。2.但如果只傳入了一個(gè)參數(shù),那么?arguments[1]?設(shè)置的值不會(huì)反映到命名參數(shù)中,這是因?yàn)?arguments?對(duì)象的長(zhǎng)度是由傳入?yún)?shù)個(gè)數(shù)決定的,不是由定義函數(shù)時(shí)的命名參數(shù)個(gè)數(shù)決定的,沒有傳遞值的命名參數(shù)將自動(dòng)被賦予?undefiend?值,這就跟定義了變量但沒初始化一樣。3.functiondoAdd(num1,num2){4.conso

8、le.log(arguments.length);5.console.log(num2)6.arguments[1]=10;7.console.log(num2);8.}9.doAdd(5,0);//201010.doAdd(5);//1undefiendundefined沒有重載ECMAScript函數(shù)不能像傳統(tǒng)意義上那樣實(shí)現(xiàn)重載,而在其他語言中(Java),可以為一個(gè)函數(shù)編寫兩個(gè)定義,只要這兩個(gè)定義的簽名(接收參數(shù)的類型和

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。