說起來ecmascript中上面最有意思,我想那莫過於函式了,有意思的根源,則在於函式實際上是物件。每個函式都是function型別的例項,而且都與其他引用型別一樣具有屬性和方法。由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標,不會與某個函式繫結。函式通常是使用函式宣告語法定義的,如下例子:
複製** **如下:
function sum(num1,num2)
這與下面使用函式表示式定義函式的方式幾乎相差無幾。
複製** **如下:
var sum=function(num1,num2)
; 以上**定了變數sum並將其初始化為乙個函式。你們會注意到,function關鍵字後程式設計客棧面沒有函式名。這是因為在使用函式表示式定義函式時,沒有必要使用函式名(通過變數sum既可以引用函程式設計客棧數)。另外,還要注意函式末尾有乙個分號,就像宣告其他變數時一樣。
最後一種定義函式的方式是使用function建構函式。function建構函式可以接受任意數量的引數,但最後乙個引數始終都會被看成函式體,而前面的引數則列舉出了新函式的引數。如下例子:
複製** **如下:
var sum=new function("num1","num2","return num1+num2");//不推薦
從技術角度講,這是乙個函式表示式。但是,我們不推薦使用這種方法定義函式, 因為這種語法會導致解析兩次**(第一次解析常規的ecmascript**,第二次是解析傳入建構函式中的字串),從而影響效能。不過,這種語法對於理解「函式是物件,函式名是指標」的概念都是非常直觀的。
由於函式名僅僅是指向函式的指標,因此函式名與包含物件指標的其他變數沒有什麼不同。換句話說,乙個函式可能會有多個名程式設計客棧字,如下例子:
複製** **如下:
function sum(num1,num2)
alert(sum(10,10));//20
var anothersum=sum;
alert(anothersum(10,10));//20
sum=null;
alert(anothersum(10,10));//20
以上**首先定義了乙個名為sum()的函式,用於求兩個值的和。然後,有宣告了變數anothersum,並將其設定為sum()相等(將sum的值賦給anothersum)。注意,使用不帶圓括號的函式名是訪問函式指標,而非呼叫函式。此時,anothersum和sum 就指向了同乙個函式,因此anothersum()也可以被呼叫並返回結果。即使將sum設定為null,讓它與函式「斷絕關係」,但仍然可以證明正常呼叫anothersum()。
本文標題: ecmascript中函式function型別
本文位址: /ruanjian/j**a/125803.html
ECMAScript中的函式
有 3 種定義函式的方式 函式宣告 function關鍵字後需要指定函式名 function sum num1,num2 不加分號 console.log sum 2,3 5函式表示式 function關鍵字後不用指定函式名 函式末尾需要新增乙個分號,就像宣告其他變數時一樣 var sum func...
ECMAScript中的箭頭函式
ecmascript中的箭頭函式 ecmascript6中允許使用箭頭 表示函式,使用箭頭函式使得 更加簡潔,使用箭頭函式時,函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。使得es程式設計時擺脫this作用域問題的困擾,避免多次使用bind this 繫結this的作用域。箭...
ECMAScript 箭頭函式
一 ecmascript 箭頭函式 es5中的函式定義 es5中定義函式 方式一 function sum x,y 方式二 varsum function sum x,y console.log sum 4,5 這兩種定義方式的區別 1.方式一 定義的函式,無論你在函式前呼叫,還是函式後呼叫,都不會...