1. 程式人生 > 其它 >函式及應用例子

函式及應用例子

技術標籤:筆記

函式

作用

1.簡化程式碼
2.方便維護
3.提高開發效率
4.提高了程式碼的複用性,減少程式碼冗餘
格式:
function 函式名(引數…){
函式執行的程式碼(函式體)
}
引數劃分:

  1. 形參:變數,沒有固定值,可以被改變
  2. 實參:常量,固定值,不可以被改變
    **【注意】**函式先定義後呼叫

分類

1.內建函式(官方提供的函式,系統自身擁有函式)
alert();
document.write();
console.log();
parseInt();
parseFloat();
2.自定義函式
根據引數和返回值的不同,可將函式分為四種。
1.無引數無返回值

function
sum() { var sum = 0; for (var i = 1; i <= 100; i++) { sum += i; } document.write(sum); } sum();

在這裡插入圖片描述

2.有引數無返回值

function sum(n) {
            var sum = 0;
            for (var i = 1; i <= n; i++) {
                sum +=
i; } document.write(sum); } sum(100);

在這裡插入圖片描述

3.無引數有返回值

function sum() {
            var sum = 0;
            for (var i = 1; i <= 100; i++) {
                sum += i;
            }
            return sum;

        }
        var a = sum();
        alert(a);

在這裡插入圖片描述

4.有引數有返回值

function sum(n) {
            var sum = 0;
            for (var i = 1; i <= n; i++) {
                sum += i;
            }
            return sum;
        }
        var a = sum(100);
        alert(a);

在這裡插入圖片描述

封裝函式

步驟:
1.確定函式的執行程式碼:函式體。
2.找出變數(不確定值。),將其設定為形參
3.如果需要對返回結果進行不同的處理,則定義返回值。

三個數比較大小

 		function compare(a, b, c) {
            var temp;
            if (a > b) {
                temp = a;
                a = b;
                b = temp;
            }
            //a與b比較,若a>b,則a與b的值交換,a一定比b小
            if (b > c) {
                temp = c;
                c = b;
                b = temp;
            }
            //b與c比較,若b>c,則b與c的值交換,c一定比b大
            if (a > b) {
                temp = a;
                a = b;
                b = temp;
            }
            //因為a一定比b小 、c一定比b大,那麼就已經找到最大值了c,只需要讓a與b在比較一次就可以了
            return a + "<" + b + "<" + c;
        }
        alert(compare(4, 8, 1));

如 4,8,1三個數分別為a,b,c,a與b 比較(a一定比b小),a=4、b=8;b與c 比較(c一定比b大),b=1、c=8;a與b 比較(a一定比b小),a=1、b=4,
在這裡插入圖片描述

隨機生成四位數的驗證碼

方法1

   		// Math.random();
        // 獲取0-1之間的隨機數
        function encryption() {
            var code = parseInt(Math.random() * 10000);
            if (code < 10) {
                code = "000" + code;
            } else if (code < 100) {
                code = "00" + code;
            } else if (code < 1000) {
                code = "0" + code;
            }
            return code;
        }
        document.write(encryption())

方法2

		function encryption() {
            var code = "";
            for (var i = 0; i < 4; i++) {
                code += parseInt(Math.random() * 10);
            }
            return code;
        }
        document.write(encryption())

對密碼加密

密碼是一個四位整數,需要進行加密.加密演算法為:
1.每個數字都加5,然後用除以10的餘數替代該數字.
2.再講數字的各個位數進行反轉.,
編寫這樣一個函式,傳入原資料,返回加密資料.
方法1

 		var num = prompt("請輸入一個四位數!");
        var a = parseInt(num / 1000);
        var b = parseInt(num % 1000 / 100);
        var c = parseInt(num % 100 / 10);
        var d = num % 10;
        var arr = [a, b, c, d];

        function encryption(arr) {
            for (var i = 0; i < arr.length; i++) {
                arr[i] = (arr[i] + 5) % 10;
            }
            arr.reverse();
            
            var result = arr.join("&nbsp;")
            return result;
            
			//var str = "";
            // for (var i = 0; i < arr.length; i++) {
            //     str += arr[i];
            // }
            // return (str);
        }
        document.write(encryption(arr));
        console.log(typeof(encryption(arr)));

方法2

		function encryption(num) {
            var authCode = compute(parseInt(num / 1000));
            var hunderse = compute(parseInt(num % 1000 / 100));
            var tens = compute(parseInt(num % 100 / 10));
            var unit = compute(num % 10);
        }

        function compute(num) {
            return (num + 5) % 10;
        }
        var num = prompt("請輸入一個四位數!");
        if (num < 10) {
            num = "000" + num;
        } else if (num < 100) {
            num = "00" + num;
        } else if (num < 1000) {
            num = "0" + num;
        }
        var result = encryption(num);

arguments

arguments:特殊的類陣列物件,該物件按引數,索引包含的所有引數。
定義一個函式,引數的數量不固定
arguments是用來儲存實參。
當呼叫函式時,函式內的實參就會存放在arguments中。
例子
利用arguments求和

 		function sum() {
            var num = 0;
            for (var i = 0; i < arguments.length; i++) {
                num += arguments[i];
            }
            return num;

        }
       var result = sum(1, 5, 6, 7, 8);
       alert(result);

在這裡插入圖片描述

作用域

作用域:變數存在的範圍
全域性變數
直接寫在Script標籤中的變數,在頁面中的任意位置都可以訪問到。
在頁面開啟建立,在頁面關閉時銷燬。
區域性變數
區域性變數是定義在函式內部的變數.這個變數只能在函式內使用.例外,函式中的形參也是區域性變數.
每一次呼叫時建立,呼叫結束會銷燬。
【注意】
如果區域性變數與全域性變數重名,則使用區域性變數。若函式內部沒有找到該變數,則去全域性變數中查詢。

		var a = 10;
        function sum() {
            console.log(a);
        }
        sum();

在這裡插入圖片描述
變數a是全域性變數,在函式sum()可以呼叫;

		var a = 10;
        function sum() {
            console.log(a);
            var a = 5;

        }
        sum();

在這裡插入圖片描述
函式體內的變數a是區域性變數,在sum()呼叫時會首先找函式體內的區域性變數,有就會呼叫區域性變數,函式體內的a雖然寫在呼叫後面,但是在函式體內的變數宣告,有一個工能,宣告提升:變數宣告無論是在函式體內的那個位置定義的,宣告都會放在函式體最前面;

        function sum1() {
            console.log(a);
            var a = 5;
        }
         function sum2() {
        	var a;
            console.log(a);
            a = 5;
        }
        //sum12函式體內的程式碼相當於與sum2函式體內的程式碼,這就是函式體內的宣告提升
		var a = 10;

        function sum(a) {
            console.log(a);
        }
        sum();

在這裡插入圖片描述
這時函式體內呼叫的a是函式sum(a)內的形參a,所以結果為undefined。

		var a = 10;
		var b = 10;
        function sum() {
            console.log(a);
            var b = 5;
        }
        console.log(b);
        sum();

在這裡插入圖片描述

遞迴

遞迴:函式之間可以互相呼叫,如果函式內部呼叫了其自身,則我們稱其為遞迴呼叫。
特點:
1.函式自己呼叫自己
2.一般情況下還有引數
3.一般情況下有返回值.
方法:
1.找這一次計算與上一次計算的關係。
2.呼叫自身
3.找到函式結束的條件。
兔子繁殖問題
設有一對新生兔子,從第四個月開始每個月初都會生一對兔子,新生的兔子從第四個月開始也會每個月初生一對兔子,按照這個規律,假設兔子沒有死亡,n(n<=20)個月月末後共有多少對兔子。

                    一月兔   二月兔  	三月兔   成熟兔       總數

第一個月 1 0 0 0 1
第二個月 0 1 0 0 1
第三個月 0 0 1 0 1
第四個月 1 0 0 1 2
第五個月 1 1 0 1 3
第六個月 1 1 1 1 4
第七個月 2 1 1 2 6
第8個月 3 2 1 3 9
第9個月 4 3 2 4 13
第10個月 6 4 3 6 19

本月成熟兔:上個月的成熟兔+上上上個月的成熟兔

function rabbit(n) {
             if (n<4) {
                 return 1;
             }
             return rabbit(n-1)+rabbit(n-3);
         }
         alert(rabbit(9));

解釋
rabbit(n-1)+rabbit(n-3)會呼叫函式rabbit(n),rabbit(n-1)此時的n-1就是**rabbit(n)中的n、rabbit(n-3))此時的n-3就是rabbit(n)**中的n,如n為9;return rabbit(8)+rabbit(6);,[rabbit(8):return rabbit(7)+rabbit(3);(rabbit(7):return rabbit(6)+rabbit(4);rabbit(3):n<4,return 1);rabbit(6):return rabbit(5)+rabbit(2);]