溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript函數(shù)怎么定義和使用

發(fā)布時間:2022-07-07 10:04:55 來源:億速云 閱讀:99 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“JavaScript函數(shù)怎么定義和使用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“JavaScript函數(shù)怎么定義和使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1.用函數(shù)語句定義

先給一個例子,該函數(shù)的功能是返回數(shù)組元素的和;

function sumArray(arr) {  
    var sum = 0;  
    for(var i = 0,aLength = arr.length;i < aLength;i++) {  
        sum += arr[i];  
    }  
    return sum;  
}

關(guān)鍵字function后面空一格,sumArray是函數(shù)的名字,其命名規(guī)范與變量名的命名規(guī)范相同:只能有字母、數(shù)字、下劃線和美元符號,不能以數(shù)字開頭,不能是關(guān)鍵字。

括號中是參數(shù),又叫形式參數(shù),只需要參數(shù)名就可以。參數(shù)可以是0個、1個或者多個,相互之間用,隔開,{}中間包含的是函數(shù)體。含有一條或者多條語句。函數(shù)體用來實現(xiàn)函數(shù)的功能。

關(guān)鍵字return后面是函數(shù)的返回值,函數(shù)也可以沒有返回值。函數(shù)運行完return這句話這里就會退出運行,return下面的語句不再運行。返回值即函數(shù)的輸出。

用這種方式定義的函數(shù),在函數(shù)定義的前面和后面都可以調(diào)用該函數(shù),只要函數(shù)和調(diào)用函數(shù)的語句在一個源文件里面就可以了。

2.用表達式定義

用表達式的方式定義函數(shù),就是用賦值表達式把函數(shù)賦值給一個變量,這其實就是把函數(shù)看成一個變量。這個時候函數(shù)可以有名字,也可以沒有名字,沒有名字的函數(shù)叫做匿名函數(shù)。

帶名字的;

var funct = function getMax(a,b) {  
    return a>b?a:b;  
};//注意這后面的分號不能少,因為我們定義的是一個變量!

和用函數(shù)語句定義不同的是,只能在函數(shù)定義語句之后調(diào)用該函數(shù),且調(diào)用的時候只能用變量名funct,不能用函數(shù)名getMax,如:

var funct = function getMax(a,b) {  
    return a>b?a:b;  
};  
console.log(funct(1,2));//輸出2

匿名函數(shù);

所謂匿名函數(shù)就是關(guān)鍵字function之后直接是參數(shù)列表:

var funct = function(a,b) {  
    return a>b?a:b;  
};

這個函數(shù)沒有名字,它被賦值給了變量funct,所以叫匿名函數(shù)。同樣,也只能在這一語句之后調(diào)用該函數(shù)。

var funct = function(a,b) {  
    return a>b?a:b;  
};  
console.log(funct(1,2));//輸出2

總結(jié):用表達式定義函數(shù)是即拿即用的,定義了就只能在這一語句之后調(diào)用該函數(shù)

3.函數(shù)的調(diào)用

在實訓四中,我們曾經(jīng)介紹過對象可以有自己的方法,當然這也是函數(shù)。這種函數(shù)的調(diào)用和前面兩關(guān)定義的函數(shù)有細小的區(qū)別。

//函數(shù)的定義:求三個數(shù)的最大值  
function max(a,b,c) {  
    if(a > b) {  
        if(a > c)  
            return a;  
        else   
            return c;  
    }  
    else {  
        if(b > c)  
            return b;  
        else   
            return c;  
    }  
}  
//調(diào)用該函數(shù)  
var result = max(1,2,3);//result為3  
console.log(result);//輸出3

調(diào)用函數(shù)的時候,需要傳入和形參相同個數(shù)的的具體值,上面的函數(shù)有3個參數(shù),所以下面調(diào)用的時候傳入3個具體的值,1傳給參數(shù)a,2傳給參數(shù)b,3傳給參數(shù)c。函數(shù)的返回值通過賦值符號=傳給了變量result。如果函數(shù)體內(nèi)沒有return關(guān)鍵字,將返回undefined。

對象里定義的函數(shù)的調(diào)用:

var ob = {  
    id:1,  
    getMax:function(a,b) {  
        return a>b?a:b;  
    }  
};  
var result = ob.getMax(2,1);//result值為2  
var result1 = ob["getMax"](2,1);//result1的值也是2

與上面的區(qū)別是,這里要定位到函數(shù),需要使用對象名.函數(shù)名或者對象名["函數(shù)名"],其它相同。

4.未定義的實參

在大部分的編程語言里面,都會對調(diào)用函數(shù)時傳入的實參個數(shù)和類型進行檢查,而JavaScript既不檢查實參的類型,也不檢查實參的個數(shù)。
JavaScript中的實參會按照順序從左到右依次匹配上形參,例如:

function myFunction(a,b,c) {  
    console.log(a);  
    console.log(b);  
    console.log(c);  
}  
myFunction(1,2,3);

實參1傳入形參a,實參2傳入形參b,實參3傳入形參c。 當實參個數(shù)少于形參時,靠右的形參會被傳入值undefined。如:

function myFunction(a,b,c) {  
    console.log(a);  
    console.log(b);  
    console.log(c);  
}  
myFunction(1,2);

實參1傳入形參a,實參2傳入形參b,undefined傳入形參c。 如果只想給右側(cè)的參數(shù)傳入數(shù)據(jù),可以給前幾個實參傳入undefined。如:

function myFunction(a,b,c){  
console.log(a);  
console.log(b);  
console.log(c);  
}  
myFunction(undefined,1,2);

上面這兩種做法不夠嚴謹,最佳實踐是給可能被傳入undefined值的形參設定一個默認值。如:

function getSum(a,b,c) {  
    if(c === undefined)   
        c = 0;  
    console.log(a+b+c);  
}  
myFunction(1,2);

5.實參對象

JavaScript一切都是對象,實參也是一個對象,有一個專門的名字arguments,這個對象可以看成一個數(shù)組(類數(shù)組,不是真的數(shù)組),實參從左到右分別是arguments[0]、arguments[1]...,arguments.length表示實參的個數(shù)。

//求參數(shù)的和  
function getSum() {  
    var aLength = arguments.length;  
    var sum = 0;  
    for(var i = 0;i < aLength;i++) {  
        sum += arguments[i];  
    }  
    return sum;  
}  
console.log(getSum(1,2,3,4,5))//輸出15

這里的形參直接省略,使用arguments[i]表示。

6.對象作為參數(shù)

復雜的函數(shù)通常多達十幾個參數(shù),盡管JavaScript不做參數(shù)個數(shù)和類型的檢查,但是調(diào)用時實參的順序不能亂。開發(fā)人員需要檢查每一個實參和形參的對應關(guān)系,這樣效率很低。一種很好的解決方案是使用對象作為參數(shù),函數(shù)會根據(jù)對象的屬性名操作參數(shù)。

function myFunction(obj) {  
    console.log(obj.name);  
    obj.number++;  
    return obj.number;  
}  
myObj = {name:"myObj",number:34};  
myFunction(myObj);//輸出myObj  
console.log(myObj.number);//輸出35

7.函數(shù)對象作為另一個函數(shù)的參數(shù)

一個函數(shù)(為方便行文,稱為a函數(shù))可以作為另外一個函數(shù)(稱為b函數(shù))的參數(shù),b函數(shù)最終可以返回一個具體的值。

從原理上來說,b函數(shù)在自己的函數(shù)體內(nèi)調(diào)用了a函數(shù),所以需要把a函數(shù)的名字作為實際參數(shù)傳遞給b函數(shù)。如下:

//求最大值  
function getMax(a,b) {  
    return a>b?a:b;  
}  
//求最小值  
function getMin(a,b) {  
    return a<b?a:b;  
}  
//下面這個函數(shù)以函數(shù)作為參數(shù),并最終返回一個值  
function getM(func,num1,num2) {  
    return func(num1,num2);  
}  
getM(getMax,1,2);//返回2  
getM(getMin,1,2);//返回1

我們把a函數(shù)的名字(getMax或者getMin)傳給b函數(shù)(getM()),然后在b函數(shù)內(nèi)部調(diào)用傳入的a函數(shù),得到相關(guān)的結(jié)果。

讀到這里,這篇“JavaScript函數(shù)怎么定義和使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI