當前位置:才華齋>設計>網頁設計>

javascript中Function型別詳細介紹

網頁設計 閱讀(7.35K)

function型別,毋庸置疑是js中相當重要的一個玩意。

javascript中Function型別詳細介紹

1.這玩意首先是一個物件,也就是說它是一個引用型別。陳述:一聽說是物件,是不是很有一種它的基類是object物件錯覺感,No,

它和object是獨立的2個東西。當你typeof function 時,返回的.是 funciton 並非 object

2.每個函式都是 Function 物件的一個例項,它與其他引用物件一樣具有屬性和方法。由於它是物件所以函式名是指向函式物件的指標

關於函式的宣告的語法支援:

//方式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種方式都能完成一個函式的宣告,但各有不同。

方式1 理解為 一個函式的宣告,方式2,方式3理解為函式表示式。(方式3不推薦使用,原因會導致解析2次程式碼,先解釋常規ECMAScript程式碼,在解釋傳入的引數,這種

寫法,引數可以是N個,但是最後一個引數視為函式主體)

為什麼說不同,主要在於,js解析器對函式宣告 和 函式表示式 解析的不同。解析器會優先讀取函式申明,js引擎在執行時會將函式宣告自動放到執行環境的最頂端。

而函式表示式則不同,當執行到函式表示式時,才會真正去被解釋執行。關於這點理解很重要!

看程式碼

(typeof fun); //"function" (typeof fun2); //"undefined" (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.為什麼函式沒有過載?

這個問題要從js的語言特性來考慮。在第2條已經說了,函式名稱只是指向函式物件的一個指標。根據指標的概念去理解就清楚了。

看程式碼示例:

function fun(n1){ return n1+100; } function fun(n1){ return n1+200; } (fun(1));// 201 //以上寫法在解析後應為 var fun=function(n1){ return n1+100; } fun=function(n1){ return n1+200; } // fun 的引用被覆蓋了 (fun(1));// 201

今天就寫到這,都是寫基本概念,希望對這塊有盲點的起到幫助!有什麼需要指正的地方,希望各位霸氣留言指正。