- 相關(guān)推薦
javascript中Function類(lèi)型詳細介紹
function類(lèi)型,毋庸置疑是js中相當重要的一個(gè)玩意。
1.這玩意首先是一個(gè)對象,也就是說(shuō)它是一個(gè)引用類(lèi)型。陳述:一聽(tīng)說(shuō)是對象,是不是很有一種它的基類(lèi)是object對象錯覺(jué)感,No,
它和object是獨立的2個(gè)東西。當你typeof function 時(shí),返回的是 funciton 并非 object
2.每個(gè)函數都是 Function 對象的一個(gè)實(shí)例,它與其他引用對象一樣具有屬性和方法。由于它是對象所以函數名是指向函數對象的指針
關(guān)于函數的聲明的語(yǔ)法支持:
//方式1 function fun(num1,num2){ return num1+num2; } //方式2 var fun=function(num1,num2){ return num1+num2; }; //方式3 var fun=new Function("n1","n2","return n1+n2");
講解:3種方式都能完成一個(gè)函數的聲明,但各有不同。
方式1 理解為 一個(gè)函數的聲明,方式2,方式3理解為函數表達式。(方式3不推薦使用,原因會(huì )導致解析2次代碼,先解釋常規ECMAScript代碼,在解釋傳入的參數,這種
寫(xiě)法,參數可以是N個(gè),但是最后一個(gè)參數視為函數主體)
為什么說(shuō)不同,主要在于,js解析器對函數聲明 和 函數表達式 解析的不同。解析器會(huì )優(yōu)先讀取函數申明,js引擎在執行時(shí)會(huì )將函數聲明自動(dòng)放到執行環(huán)境的最頂端。
而函數表達式則不同,當執行到函數表達式時(shí),才會(huì )真正去被解釋執行。關(guān)于這點(diǎn)理解很重要!
看代碼
console.log(typeof fun); //"function" console.log(typeof fun2); //"undefined" console.log(typeof fun3); //"undefined" function fun(n1,n2){ return n1+n2; } var fun2=function(n1,n2){ return n1+n2; } var fun3=new Function("n1","n2","return n1+n2;");
3.為什么函數沒(méi)有重載?
這個(gè)問(wèn)題要從js的語(yǔ)言特性來(lái)考慮。在第2條已經(jīng)說(shuō)了,函數名稱(chēng)只是指向函數對象的一個(gè)指針。根據指針的概念去理解就清楚了。
看代碼示例:
function fun(n1){ return n1+100; } function fun(n1){ return n1+200; } console.log(fun(1));// 201 //以上寫(xiě)法在解析后應為 var fun=function(n1){ return n1+100; } fun=function(n1){ return n1+200; } // fun 的引用被覆蓋了 console.log(fun(1));// 201
今天就寫(xiě)到這,都是寫(xiě)基本概念,希望對這塊有盲點(diǎn)的起到幫助!有什么需要指正的地方,希望各位霸氣留言指正。
【javascript中Function類(lèi)型詳細介紹】相關(guān)文章:
關(guān)于數據類(lèi)型的Javascript學(xué)習筆記08-05
有關(guān)深入理解JavaScript中的并行處理的介紹10-14
JavaScript中的with關(guān)鍵字07-24
在Java中執行JavaScript代碼07-14
抽象語(yǔ)法樹(shù)在JavaScript中的應用08-18
JavaScript中的三種對象10-24
perl- javascript中class的機制05-03
JavaScript數組常用方法介紹09-04