JavaScript-----9.函數


1.函數的使用

1.1 聲明函數和調用函數

//1.聲明函數
//function 函數名() {
//    //函數體
//}
function sayHi() {
    console.log('hi~');
}

//2.調用函數
//函數名();
sayHi(); //hi~

案例:利用函數計算1~100之間的累加和

function getSum() {
    sum = 0;
    for (var i = 1; i <= 100; i++) {
        sum = sum + i;
    }
    console.log(sum);

}
getSum(); //5050
getSum(); //5050

2.函數的參數

2.1語法格式

//1.聲明
//function 函數名(形參1, 形參2,...) {
//    //函數體
//}
//2.調用
//函數名(實參1, 實參2,...);
function cook(aru) {
    console.log(aru);
}
cook('酸辣土豆絲'); //酸辣土豆絲

說明:

  • 函數的參數可以有,也可以沒有,個數不限

2.2案例:利用函數求任意兩個數之和

function getSum(a, b) {
    console.log(a + b);
}
getSum(1, 5); //6
getSum(66, 66); //132

2.3案例:利用函數求任意兩個數之間的數之和

function getSum(a, b) {
    var sum = 0;
    for (var i = a; i <= b; i++) {
        sum = sum + i;
    }
    console.log(sum);
}
getSum(1, 100); //5050
getSum(2, 6); //20

說明:形參可以是看作兩個不用聲明的變量

2.4函數實參和形參不匹配問題

function getSum(num1, num2) {
    console.log(num1 + num2);
}
//1.如果實參的個數和形參的個數一致則正常輸出
getSum(1, 2); //3
//2.如果實參個數多於形參個數則會取到形參的個數
getSum(1, 2, 3); //3
//3.如果實參個數小於形參個數
//由於形參是可以看作不用聲明的變量  num2是一個變量但是沒有接收值,那num2就是undefined
getSum(1); //NaN

//建議:盡量讓實參的個數和形參的個數相匹配

3.函數的返回值

3.1語法格式

//格式
function 函數名() {
    return 需要返回的結果
}
函數名();

3.2運用

function getResult() {
    return 666;
}
getResult();
console.log(getResult()); //666

3.3之前程序的改進

function cook(aru) {
    return aru;
}
console.log(cook('酸辣土豆絲')); //酸辣土豆絲

function getSum(num1, num2) {
    return num1 + num2;
}
console.log(getSum(1, 2)); //3

3.4案例

案例1:利用函數求兩個數的最大值
方法1:

function getMax(a, b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}
console.log(getMax(1, 5)); //5
console.log(getMax(10, 5)); //10

方法2:

function getMax(a, b) {
    return a > b ? a : b;
}
console.log(getMax(1, 5)); //5
console.log(getMax(10, 5)); //10

案例2:利用函數求數組中的最大值

function getArrMax(a) {
    var len = a.length;
    var max_value = a[0];
    for (var i = 1; i < len; i++) {
        if (a[i] > max_value) {
            max_value = a[i]
        }
    }
    return max_value;
}
var re = getArrMax([5, 2, 99, 101, 67, 77]);
console.log(re); //101

3.5注意事項

  • return除了可以返回函數值之外,還可以終止函數,即return之后的代碼不會被執行
  • return只能返回一個值,如果用逗號隔開多個值,以最后一個值為准
//1.終止函數
function getSum(num1, num2) {
    return num1 + num2;
    alert('我是不會被執行的哦!');
}
console.log(getSum(1, 2));

//2.return只能返回一個值
function fn(num1, num2) {
    //如果用逗號隔開多個值,以最后一個值為准 返回num2
    return num1, num2;
}
console.log(fn(1, 2)); //2

案例:求兩個數的加減乘除

function getResult(num1, num2) {
    return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}
var re = getResult(6, 3);
console.log(re);
  • 若函數沒有return 則返回的是undefined
function fun() {

}
console.log(fun());//undefined

3.6 break continue return的區別

  • break:結束當前的循環
  • continue:跳出本次循環,繼續執行下次循環
  • return: 不僅可以退出循環還可以返回return語句中的值,同時還可以結束當前函數體內的代碼

3.7作業

作業1:寫一個函數,用戶輸入任意兩個數字的任意算數運算,彈出運算后的結果(簡單計算器)

function cal() {
    num1 = prompt('請輸入第一個數');
    symbol = prompt('請輸入運算符號');
    num2 = prompt('請輸入第二個數');

    switch (symbol) {
        case '+':
            return num1 + num2;
        case '-':
            return num1 - num2;
        case '*':
            return num1 * num2;
        case '/':
            return num1 / num2;
    }
}
alert(cal());

作業2:寫一個函數,用戶輸入三個不同的數值,返回最大值

function maxnum(num1, num2, num3) {
    if (num1 > num2) {
        if (num1 > num3) {
            return num1;
        } else {
            return num3;
        }
    } else {
        if (num2 > num3) {
            return num2;
        } else {
            return num3;
        }
    }
}

作業3:寫一個函數,用戶輸入一個數,判斷是否是素數(可被1和自身整除的數)

function prime(num) {
    for (var i = 2; i <= num / 2; i++) {
        if (num % i == 0) {
            return num + '不是素數';
        }
    }
    return num + '是素數';
}
alert(prime(2));//2是素數

4.arguments的使用

之前提到過函數的實參和形參最好匹配上,否則如果實參多了可能會用不上,實參少了可能會出問題。當我們不確定有多少個參數傳遞的時候,可以用arguments來獲取。在JavaScript中,arguments是當前函數的一個內置對象。所有的函數都內置了一個arguments對象,arguments對象中存儲了傳遞的所有實參。

偽數組
arguments展示形式是一個偽數組,因此可以進行遍歷,偽數組具有以下特點:

  • 具有length屬性
  • 按索引方式存儲數據
  • 可以遍歷數組
  • 不具有數組的push、pop等方法
//arguments的使用
function fn() {
    console.log(arguments); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]arguments是一個偽數組里面存儲了所有傳遞過來的實參
    //arguments是偽數組
    console.log(arguments.length); //有長度3
    console.log(arguments[2]); //可索引3
    //可以按數組的方式遍歷arguments=[1,2,3];
    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
}
fn(1, 2, 3);

利用arguments求任意兩個數的最大值

function maxnum() {
    var max = arguments[0];
    for (var i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}
rel = maxnum(2, 5, 66, 2, 69, 129, 333, 2, 0);
console.log(rel);

5.函數的案例

5.1案例1

要求:利用函數封裝的方法翻轉任意一個數組

//利用函數封裝的方法翻轉任意一個數組
function reverArr(arr) {
    var arrNew = [];
    for (i = arr.length - 1; i >= 0; i--) {
        arrNew[arrNew.length] = arr[i];
    }
    return arrNew;
}
var a = [1, 2, 3, 4, 6, 8, 2, 6, 8];
var re = reverArr(a);
console.log(re);

5.2案例2

要求:利用函數封裝的方式對數組排序(冒泡排序)

//冒泡排序
//對於i的范圍:1個數,不用排; 兩個數,排1趟; 三個數 排2趟。。。n個數,排n-1趟
//對於j的范圍,n個數:第一趟比較n-1次,第二趟比較n-2次。。。第n-1趟比較1次
function sort(arr) {
    var temp;
    for (i = 0; i < arr.length - 1; i++) {
        for (j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}
console.log(sort([4, 1, 6, 88, 9, 3, 666])); //(7) [1, 3, 4, 6, 9, 88, 666]

5.3案例3

要求:輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)

<script>
    //輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)
    function leap(year) {
        var flag = false;
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            flag = true;
        }
        return flag;
    }
    console.log(leap(2000)); //true
    console.log(leap(1999)); //false
</script>

5.4一個函數可以調用另一個函數

案例4
要求:用戶輸入年份,輸出當年二月份的天數,即如果用戶輸入的是閏年二月份就是29天,如果用戶輸入的是平年,二月份就是28天

function backDays() {
    year = prompt('用戶輸入年份');
    if (leap(year)) {
        return alert(year + '年的二月份天數為' + 29 + '天');
    }
    return alert(year + '年的二月份天數為' + 28 + '天');
}
backDays()

//輸入一個年份,判斷是否是閏年(閏年:能被4整除且不可以被100整除或者可以被400整除)
function leap(year) {
    var flag = false;
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
        flag = true;
    }
    return flag;
}

6.函數的兩種聲明方式

  • 利用函數關鍵自定義函數
  • 函數表達式
//函數的2種聲明方式
//1. 利用函數關鍵自定義函數(命名函數)
function fn() {

}
fn();
//2.函數表達式 匿名函數
//var 變量名=function(){}; 注意fun是變量名而不是函數名
var fun = function(aru) {
    console.log('我是函數表達式'); //我是函數表達式
    console.log(aru); //我是pink老師

}
fun('我是pink老師');
//(1)fun是變量名 不是函數名
//(2)函數表達式聲明方式和聲明變量差不多,只不過變量里存的是值,函數表達式里存的是函數
//函數表達式也可以進行傳遞參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM