JavaScript基礎第04天(黑馬)

昨日複習

  • 結束當前次循環的關鍵詞是 continue
  • 結束當前循環的關鍵詞是 break
  • JS的循環有 for while do-while

01 - 數組的使用

1. 數組的概念

問:之前學習的數據類型,只能存儲一個值。如果我們想存儲班級中所有學生的姓名,那麼該如何存儲呢?
答:可以使用數組(Array)。數組可以把一組相關的數據一起存放,並提供方便的訪問(獲取)方式。

問:什麼是數組呢?
答:數組是指 一組數據的集合 ,其中的每個數據被稱作 元素 ,在數組中可以 存放任意類型的元素 。數組是一種將 一組數據存儲在單個變量名下 的優雅方式。

// 普通變量一次只能存儲一個值
var num = 10; 
// 數組一次可以存儲多個值
var arr = [1,2,3,4,5];

2. 創建數組

2.1 數組的創建方式

JS 中創建數組有兩種方式:

  • 利用 new 創建數組
  • 利用數組字面量創建數組

2.2 利用new創建數組

var 數組名 = new Array()var arr = new Array(); // 創建一個新的空數組
  • 這種方式暫且瞭解,等學完對象再看
  • 注意 Array () ,A 要大寫

2.3 利用數組字面量創建數組

//1. 使用數組字面量方式創建空的數組
var 數組名 = []//2. 使用數組字面量方式創建帶初始值的數組
var 數組名 = ['小白','小黑','大黃','瑞奇'];
  • 數組的字面量是方括號[]
  • 聲明數組並賦值稱爲數組的初始化
  • 這種字面量方式也是我們以後 最多使用的方式

2.4 數組元素的類型

數組中可以存放 任意類型 的數據,例如字符串,數字,布爾值等。

var arrStus = ['小白',12,true,28.9];

知識總結

  1. 數組的作用是什麼?
    數組:一組數據的集合,使用一個變量同時存儲多個數據

  2. 創建數組我們有哪兩種方式? 哪一種我們最常用?
    創建數組的方式:

var arr = new Array()
var arr = [ 1,2,'demo'];
  1. 什麼是數組元素? 數組裏面類型有限制嗎?
    數組中的數據成爲數組的元素,元素的數據類型沒有限制

3. 獲取數組元素

3.1 數組的索引

索引 (下標): 用來訪問數組元素的序號(數組下標從 0 開始)。
var arr = [‘小白’,‘小黑’,‘大黃’,‘瑞奇’];
索引號: 0 1 2 3
數組可以通過 索引 來訪問、設置、修改對應的數組元素,我們可以通過 “數組名[索引]” 的形式來獲取數組中的元素。
這裏的 訪問 就是獲取得到的意思

// 定義數組
var arrStus = [1,2,3];
// 獲取數組中的第2個元素
alert(arrStus[1]); // 2

知識總結

  1. 如何把數組中的元素取出來?
    數組中的每個元素都有編號,編號默認從0開始,稱爲"索引",“下標”
    從數組中取出來指定元素:利用數組的索引值取元素

  2. 如果獲取數組中不存在的元素時,獲取到的值是什麼?
    如果通過索引值獲取數組中沒有的元素,得到的值是undefined

課堂練習:數組練習

定義一個數組,裏面存放星期一、星期二…… 直到星期日(共7天),在控制檯輸出:星期日

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>01-數組的使用</title>
    <script>
        // 1.數組(Array) :就是一組數據的集合 存儲在單個變量下的優雅方式 
        // 2. 利用new 創建數組
        var arr = new Array(); // 創建了一個空的數組
        // 3. 利用數組字面量創建數組 []
        var arr = []; // 創建了一個空的數組
        var arr1 = [1, 2, 'pink老師', true];
        // 4. 我們數組裏面的數據一定用逗號分隔
        // 5. 數組裏面的數據 比如1,2, 我們稱爲數組元素
        // 6. 獲取數組元素  格式 數組名[索引號]  索引號從 0開始 
        console.log(arr1); // Array(4) [ 1, 2, "pink老師", true ]
        console.log(arr1[2]); // pink老師
        console.log(arr1[3]); // true
        var arr2 = ['迪麗熱巴', '古麗扎娜', '佟麗丫丫'];
        console.log(arr2[0]); // 迪麗熱巴
        console.log(arr2[1]); // 古麗扎娜
        console.log(arr2[2]); // 佟麗丫丫
        console.log(arr2[3]); // 因爲沒有這個數組元素 所以輸出的結果是 undefined

        // 定義一個數組,裏面存放星期一、星期二…… 直到星期日(共7天),在控制檯輸出:星期日
        var week = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日'];
        console.log(week[6]); // 星期日
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


02 - 遍歷數組

4. 遍歷數組

問:數組中的每一項我們怎麼取出來?
答:可以通過 “數組名[索引號]” 的方式一項項的取出來。

var arr = ['red','green', 'blue'];
console.log(arr[0]) // red
console.log(arr[1]) // green
console.log(arr[2]) // blue

問:怎麼把數組裏面的元素全部取出來?
規律: 從代碼中我們可以發現,從數組中取出每一個元素時,代碼是重複的,有所不一樣的是 索引值在遞增
答案就是 循環

遍歷: 就是把數組中的每個元素從頭到尾都訪問一次(類似我們每天早上學生的點名)。
我們可以通過 for 循環索引遍歷數組中的每一項

var arr = ['red','green', 'blue'];
for(var i = 0; i < arr.length; i++){
    console.log(arrStus[i]);
}

知識總結

  1. 什麼是遍歷?
    遍歷:把數據的集合中的數據逐個訪問,稱爲遍歷

  2. 如何遍歷數組?
    遍歷數組:通過循環過程中的計數器變量,把數組中的元素從頭到尾訪問一遍,稱爲遍歷數組

遍歷數組的寫法:

for( var i = 0;i < 數組的長度; i++ ){
    arr[ i ] ; // 遍歷到的數組的元素
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>02-遍歷數組</title>
    <script>
        // 遍歷數組:就是把數組的元素從頭到尾訪問一次
        var arr = ['red', 'green', 'blue'];
        for (var i = 0; i < 3; i++) {
            console.log(arr[i]); // red green blue
        }
        // 1. 因爲我們的數組索引號從0開始 ,所以 i 必須從 0開始  i < 3
        // 2. 輸出的時候 arr[i]  i 計數器當索引號來用
    </script>
</head>
<body>

</body>
</html>

03 - 數組長度

4.1 數組的長度

使用 "數組名.length"可以訪問數組元素的數量(數組長度)。

var arrStus = [1,2,3];
alert(arrStus.length); // 3

注意:

  1. 此處數組的長度是 數組元素的個數,不要和數組的 索引號混淆。
  2. 當我們數組裏面的元素個數發生了變化,這個 length 屬性跟着一起變化。

課堂案例1:遍歷數組

請將 [“關羽”,“張飛”,“馬超”,“趙雲”,“黃忠”,“劉備”,“姜維”]; 數組裏的元素依次打印到控制檯。

提問?

  1. 什麼是遍歷?
  2. 我們通過什麼來遍歷數組裏面的元素?
  3. for裏面的 i 是什麼?當什麼使用? for裏面的數組元素怎麼寫?
    i是計數器,當索引號使用, arr[i] 是數組元素 第i個數組元素
  4. 怎麼獲取數組的長度?
  5. 數組索引號和數組長度有什麼關係? 索引號從0開始,數組長度是 元素個數
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>03-數組長度</title>
    <script>
        // 數組長度 數組名.length
        var arr = ['關羽', '張飛', '馬超', '趙雲', '黃忠', '劉備', '姜維', 'pink'];
        for (var i = 0; i < 7; i++) {
            console.log(arr[i]);
        }
        console.log(arr.length); // 8
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }
        // 1. 數組的長度是元素個數  不要跟索引號混淆
        // 2. arr.length 動態監測數組元素的個數
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


04 - 計算數組的和以及平均值

課堂案例 2:數組求和及平均值
求數組 [2,6,1,7, 4] 裏面所有元素的和以及平均值。

案例分析
(1) 聲明一個求和變量 sum。
(2) 遍歷這個數組,把裏面每個數組元素加到 sum 裏面。
(3) 用求和變量 sum 除以數組的長度就可以得到數組的平均值。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>04-計算數組的和以及平均值</title>
    <script>
        var arr = [2, 6, 1, 7, 4];
        var sum = 0;
        var average = 0;
        for (var i = 0; i < arr.length; i++) {
            sum += arr[i]; // 我們加的是數組元素 arr[i] 不是計數器 i
        }
        average = sum / arr.length;
        // 想要輸出多個變量,用逗號分隔即可
        console.log(sum, average); // 20 4
    </script>
</head>
<body>

</body>
</html>

05 - 求數組中的最大值

課堂案例3:數組最大值

求數組 [2,6,1,77,52,25,7] 中的最大值。

案例分析

  1. 聲明一個保存最大元素的變量 max。
  2. 默認最大值可以取數組中的第一個元素。
  3. 遍歷這個數組,把裏面每個數組元素和 max 相比較。
  4. 如果這個數組元素大於max 就把這個數組元素存到 max 裏面,否則繼續下一輪比較。
  5. 最後輸出這個 max。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>05-求數組中的最大值</title>
    <script>
        var arr = [2, 6, 1, 77, 52, 25, 7, 99];
        var max = arr[0]; // 用來保存最大元素,默認最大值是數組中的第一個元素
        // 從0 開始循環數組裏的每個元素
        for (var i = 1; i < arr.length; i++) {
            // 如果數組裏當前循環的元素大於 max,則保存這個元素和下標
            if (arr[i] > max) {
                max = arr[i]; // 保存數值到變量 max
            }
        }
        console.log('該數組裏面的最大值是:' + max); // 該數組裏面的最大值是:99
    </script>
</head>
<body>

</body>
</html>

06 - 數組轉換爲字符串

課堂案例4:數組轉換爲字符串

要求:將數組 [‘red’, ‘green’, ‘blue’, ‘pink’] 轉換爲字符串,並且用 | 或其他符號分割
輸出: ‘red|green|blue|pink’

案例分析

1.需要一個新變量用於存放轉換完的字符串 str。
2.遍歷原來的數組,分別把裏面數據取出來,加到字符串裏面。
3.同時在後面多加一個分隔符

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>06-數組轉換爲字符串</title>
    <script>
        var arr = ['red', 'green', 'blue', 'pink'];
        var str = '';
        var sep = '*';
        for (var i = 0; i < arr.length; i++) {
            str += arr[i] + sep;
        }
        console.log(str); // red*green*blue*pink*
    </script>
</head>
<body>

</body>
</html>

07 - 新增數組元素

5. 數組中新增元素

5.1 通過修改length長度新增數組元素

  • 可以通過修改 length 長度來實現數組擴容的目的
  • length 屬性是可讀寫的
var arr = ['red', 'green', 'blue', 'pink'];
arr.length = 7;
console.log(arr); // Array(7) [ "red", "green", "blue", "pink", <3 empty slots> ]
console.log(arr[4]); // undefined
console.log(arr[5]); // undefined
console.log(arr[6]); // undefined

其中索引號是 4,5,6 的空間沒有給值,就是聲明變量未給值,默認值就是 undefined。

5.2 通過修改數組索引新增數組元素

  • 可以通過修改數組索引的方式追加數組元素
  • 不能直接給數組名賦值,否則會覆蓋掉以前的數據
var arr = ['red', 'green', 'blue', 'pink'];
arr[4] = 'hotpink';
console.log(arr);

這種方式也是我們最常用的一種方式。

知識總結

  • 修改數組的length:
    • 如果設置的length的值大於原來的數組長度,則會在數組最後留下空白位置
    • 如果設置的length的值小於原來的數組長度,則會讓數組丟失後面的元素
  • 增加數組元素:
    • 通過“數組[索引值] = 數據 ”來設置數組的元素
    • 如果索引值是已經存在的元素的索引值,則會把之前的元素的值覆蓋掉
    • 如果索引值是尚未出現的索引值,則會增加一個元素,且如果不與數組之前的最後一個元素的索引值相連的話,
      會形成空白位置
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>07-新增數組元素</title>
    <script>
        // 1. 新增數組元素 修改length長度 
        var arr = ['red', 'green', 'blue'];
        console.log(arr.length);
        arr.length = 5; // 把我們數組的長度修改爲了 5  裏面應該有5個元素 
        console.log(arr); // Array(5) [ "red", "green", "blue", <2 empty slots> ]
        console.log(arr[3]); // undefined
        console.log(arr[4]); // undefined

        // 2. 新增數組元素 修改索引號 追加數組元素
        var arr1 = ['red', 'green', 'blue'];
        arr1[3] = 'pink';
        console.log(arr1); // Array(4) [ "red", "green", "blue", "pink" ]
        arr1[4] = 'hotpink';
        console.log(arr1); // [ "red", "green", "blue", "pink", "hotpink" ]
        arr1[0] = 'yellow'; // 這裏是替換原來的數組元素
        console.log(arr1); // Array(5) [ "yellow", "green", "blue", "pink", "hotpink" ]
        arr1 = '有點意思';
        console.log(arr1); // 不要直接給 數組名賦值 否則裏面的數組元素都沒有了
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


08 - 數組存放1~10個值

課堂案例1:數組新增元素

新建一個數組,裏面存放10個整數( 1~10),要求使用循環追加的方式輸出: [1,2,3,4,5,6,7,8,9,10]

案例分析

核心原理:使用循環來追加數組。

  1. 聲明一個空數組 arr。
  2. 循環中的計數器 i 可以作爲數組元素存入。
  3. 由於數組的索引號是從0開始的, 因此計數器從 0 開始更合適,存入的數組元素要+1。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>08-數組存放1~10個值</title>
    <script>
        var arr = [];
        for (var i = 0; i < 100; i++) {
            // arr = i; 不要直接給數組名賦值 否則以前的元素都沒了
            arr[i] = i + 1;
        }
        console.log(arr); // Array(100) [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, … ]
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


09 - 篩選數組

課堂案例2:篩選數組

要求:將數組 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大於等於 10 的元素選出來,放入新數組。

案例分析

  1. 聲明一個新的數組用於存放新數據newArr。
  2. 遍歷原來的舊數組, 找出大於等於 10 的元素。
  3. 依次追加給新數組 newArr。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>09-篩選數組</title>
    <script>
        // 方法1
        var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
        var newArr = [];
        // 定義一個變量 用來計算 新數組的索引號
        var j = 0;
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] >= 10) {
                // 新數組索引號應該從0開始 依次遞增
                newArr[j] = arr[i];
                // 索引號 不斷自加
                j++;
            }
        }
        console.log(newArr); // Array(3) [ 77, 52, 25 ]
        // 方法2 
        var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
        var newArr = [];
        // 剛開始 newArr.length 就是 0
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] >= 10) {
                // 新數組索引號應該從0開始 依次遞增
                newArr[newArr.length] = arr[i];
            }
        }
        console.log(newArr); // Array(3) [ 77, 52, 25 ]
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


10 - 數組去重(刪除指定數組元素)

課堂案例1:刪除指定數組元素

要求:將數組[2, 0, 6, 1, 77, 0, 52, 0, 25, 7]中的 0 去掉後,形成一個不包含 0 的新數組。

案例分析

  1. 需要一個新數組用於存放篩選之後的數據。
  2. 遍歷原來的數組, 把不是 0 的數據添加到新數組裏面(此時要注意採用數組名 + 索引的格式接收數據)。
  3. 新數組裏面的個數, 用 length 不斷累加。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>10-數組去重(刪除指定數組元素)</title>
    <script>
        var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
        var newArr = []; // 空數組的默認的長度爲 0 
        // 定義一個變量 i 用來計算新數組的索引號
        for (var i = 0; i < arr.length; i++) {
            // 找出大於 10 的數
            if (arr[i] != 0) {
                // 給新數組
                // 每次存入一個值,newArr長度都會 +1
                newArr[newArr.length] = arr[i];
            }
        }
        console.log(newArr); // Array(7) [ 2, 6, 1, 77, 52, 25, 7 ]
    </script>
</head>
<body>

</body>
</html>

11 - 翻轉數組

課堂案例2:反轉數組

要求:將數組 [‘red’, ‘green’, ‘blue’, ‘pink’, ‘purple’] 的內容反過來存放。
輸出: [‘purple’, ‘pink’, ‘blue’, ‘green’, ‘red’]

案例分析

  1. 聲明一個新數組 newArr
  2. 把舊數組索引號第4個取過來(arr.length - 1),給新數組索引號第0個元素 (newArr.length)
  3. 我們採取 遞減的方式 i–
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>11-翻轉數組</title>
    <script>
        var arr = ['red', 'green', 'blue', 'pink', 'purple', 'hotpink'];
        var newArr = [];
        for (var i = arr.length - 1; i >= 0; i--) {
            newArr[newArr.length] = arr[i]
        }
        console.log(newArr); // Array(6) [ "hotpink", "purple", "pink", "blue", "green", "red" ]
    </script>
</head>
<body>

</body>
</html>

12 - 複習交換兩個變量

課堂案例3:數組排序(冒泡排序)

我們先複習下如何把2個變量交換數據

 // 利用第三個變量
 var num1 = 10;
 var num2 = 20;
 var temp = num1;
 num1 = num2;
 num2 = temp;
 console.log(num1, num2);
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>12-複習交換兩個變量</title>
    <script>
        // 交換兩個變量
        var num1 = 'pink';
        var num2 = 'yellow';
        var temp;
        temp = num1;
        num1 = num2;
        num2 = temp;
        console.log(num1, num2); // yellow pink
    </script>
</head>
<body>

</body>
</html>

13 - 冒泡排序

課堂案例3:數組排序(冒泡排序)

冒泡排序:是一種算法,把一系列的數據按照一定的順序進行排列顯示(從小到大或從大到小)。

例如,我們可以將數組 [5, 4, 3, 2, 1]中的元素按照從小到大的順序排序,輸出: 1,2,3,4,5

案例分析

  1. 一共需要的趟數 我們用外層for循環
  2. 每一趟交換次數 我們用裏層for循環
  3. 交換2個變量就好了
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>13-冒泡排序</title>
    <script>
        // 冒泡排序
        // var arr = [5, 4, 3, 2, 1];
        var arr = [4, 1, 2, 3, 5];
        for (var i = 0; i < arr.length - 1; i++) { // 外層循環管趟數 
            for (var j = 0; j < arr.length - i - 1; j++) { // 裏面的循環管 每一趟的交換次數
                // 內部交換2個變量的值 前一個和後面一個數組元素相比較
                if (arr[j] < arr[j + 1]) {
                    var temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        console.log(arr); // Array(5) [ 5, 4, 3, 2, 1 ]
    </script>
</head>
<body>

</body>
</html>

14 - 什麼是函數

1. 函數的概念

在 JS 裏面,可能會定義非常多的相同代碼或者功能相似的代碼,這些代碼可能需要大量重複使用。
雖然 for循環語句也能實現一些簡單的重複操作,但是比較具有侷限性,此時我們就可以使用 JS 中的函數
函數: 就是封裝了一段 可被重複調用執行的代碼塊 。通過此代碼塊可以實現大量代碼的重複使用。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>14 - 什麼是函數</title>
    <script>
        // 1. 求 1~100的累加和
        var sum = 0;
        for (var i = 1; i <= 100; i++) {
            sum += i;
        }
        console.log(sum); // 5050

        // 2. 求 10~50的累加和
        var sum = 0;
        for (var i = 10; i <= 50; i++) {
            sum += i;
        }
        console.log(sum); // 1230

        // 3. 函數就是封裝了一段可以被重複執行調用的代碼塊 目的: 就是讓大量代碼重複使用
        function getSum(num1, num2) {
            var sum = 0;
            for (var i = num1; i <= num2; i++) {
                sum += i;
            }
            console.log(sum); 
        }
        getSum(1, 100); // 5050
        getSum(10, 50); // 1230
        getSum(1, 1000); // 500500
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


15 - 函數的使用

2. 函數的使用

函數在使用時分爲兩步:聲明函數和調用函數。

2.1 聲明函數

// 聲明函數
function 函數名() {
	//函數體代碼
}
  • function 是聲明函數的關鍵字, 必須小寫
  • 由於函數一般是爲了實現某個功能才定義的, 所以通常我們將 函數名 命名爲 動詞 ,比如 getSum

2.2 調用函數

// 調用函數
函數名(); // 通過調用函數名來執行函數體代碼
  • 調用的時候千萬 不要忘記添加小括號
  • 口訣:函數不調用,自己不執行。

注意:聲明函數本身並不會執行代碼,只有調用函數時纔會執行函數體代碼。

知識總結

  • 函數的聲明:
function  函數名(參數1,參數2) {
	封裝的代碼塊  
}
  • 函數的調用: 函數名( )
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>15 - 函數的使用</title>
    <script>
        // 函數使用分爲兩步: 聲明函數 和 調用函數
        // 1. 聲明函數
        // function 函數名() {
        //     // 函數體
        // }
        function sayHi() {
            console.log('hi~~');

        }
        // (1) function 聲明函數的關鍵字 全部小寫
        // (2) 函數是做某件事情,函數名一般是動詞 sayHi 
        // (3) 函數不調用自己不執行
        // 2. 調用函數
        // 函數名();
        sayHi(); // hi~~
        // 調用函數的時候千萬不要忘記加小括號
    </script>
</head>
<body>

</body>
</html>

16 - 利用函數封裝求1~100的和

2.3 函數的封裝

  • 函數的封裝是把一個或者多個功能通過函數的方式封裝起來,對外只提供一個簡單的函數接口
  • 簡單理解:封裝類似於將電腦配件整合組裝到機箱中 ( 類似快遞打包)
    案例:利用函數計算1-100之間的累加和

2.4 提問

  1. 函數是做什麼的(作用)?
  2. 聲明函數用什麼關鍵詞?
  3. 如何調用函數?
  4. 封裝是什麼意思?
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>16 - 利用函數封裝求1~100的和</title>
    <script>
        // 1. 聲明函數
        function getSum() {
            var sum = 0; // // 準備一個變量,保存數字和
            for (var i = 1; i <= 100; i++) {
                sum += i; // // 把每個數值 都累加 到變量中
            }
            console.log(sum); 

        }
        // 2. 調用函數
        getSum(); // 5050
        getSum(); // 5050
    </script>
</head>
<body>

</body>
</html>

17 - 帶參數的函數

3. 函數的參數

3.1 形參和實參

聲明函數時 ,可以在函數名稱後面的小括號中添加一些參數,這些參數被稱爲 形參 ,而在 調用該函數時 ,同樣也需要傳遞相應的參數,這些參數被稱爲 實參

參數 說明
形參 形式上的參數 函數定義的時候 傳遞的參數 當前並不知道是什麼
實參 實際上的參數 函數調用的時候傳遞的參數 實參是傳遞給形參的

參數的作用 : 在 函數內部 某些值不能固定,我們可以通過參數在 調用函數時傳遞 不同的值進去。

聲明函數時 ,可以在函數名稱後面的小括號中添加一些參數,這些參數被稱爲 形參 ,而在 調用該函數時 ,同樣也需要傳遞相應的參數,這些參數被稱爲 實參

 // 帶參數的函數聲明
 function 函數名(形參1, 形參2 , 形參3...) { // 可以定義任意多的參數,用逗號分隔
     // 函數體
 }
 // 帶參數的函數調用
 函數名(實參1, 實參2, 實參3...);

知識總結

  • 參數的作用:在函數封裝的代碼塊中,使用參數可以在調用函數時修改指定數據,來完成不同的操作
  • 形參:在函數定義時,設置用來接收函數調用時傳過來的數據
  • 實參:在函數調用時,用戶在小括號中傳入的數據,可被形參接收,運用到函數內部的調用中
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>17 - 帶參數的函數</title>
    <script>
        // 1. 函數可以重複相同的代碼
        // function cook() {
        //     console.log('酸辣土豆絲');
        // }
        // cook(); // 酸辣土豆絲
        // cook(); // 酸辣土豆絲

        // 2. 我們可以利用函數的參數實現函數重複不同的代碼
        // function 函數名(形參1,形參2...) { // 在聲明函數的小括號裏面是 形參 (形式上的參數)
        // 
        // }
        // 函數名(實參1,實參2...); // 在函數調用的小括號裏面是實參(實際的參數)

        // 3. 形參和實參的執行過程
        function cook(aru) { // 形參是接受實參的  aru = '酸辣土豆絲' 形參類似於一個變量
            console.log(aru);
        }
        cook('酸辣土豆絲'); // 酸辣土豆絲
        cook('大肘子'); // 大肘子
        // 4. 函數的參數可以有,也可以沒有個數不限
    </script>
</head>
<body>

</body>
</html>

18 - 利用函數求任意兩個數的和

3.2 函數參數的傳遞過程

// 聲明函數
function getSum(num1, num2) {
    console.log(num1 + num2);
}
// 調用函數
getSum(1, 3); // 4
getSum(6, 5); // 11
  1. 調用的時候實參值是傳遞給形參的
  2. 形參簡單理解爲:不用聲明的變量
  3. 實參和形參的多個參數之間用逗號(,)分隔
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>18 - 利用函數求任意兩個數的和</title>
    <script>
        // 1. 利用函數求任意兩個數的和
        function getSum(num1, num2) {
            console.log(num1 + num2);

        }
        getSum(1, 3); // 4
        getSum(3, 8); // 11
        
        // 2. 利用函數求任意兩個數之間的和
        function getSums(start, end) {
            var sum = 0;
            for (var i = start; i <= end; i++) {
                sum += i;
            }
            console.log(sum);

        }
        getSums(1, 100); // 5050
        getSums(1, 10); // 55
        
        // 3. 注意點
        // (1) 多個參數之間用逗號隔開
        // (2) 形參可以看做是不用聲明的變量
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


19 - 函數形參實參個數匹配

3.3 函數形參和實參個數不匹配問題

參數個數 說明
實參個數等於形參個數 輸出正確結果
實參個數多於形參個數 只取到形參的個數
實參個數小於形參個數 多的形參定義爲undefined,結果爲NaN
function sum(num1, num2) {
 console.log(num1 + num2);
}
sum(100, 200); // 形參和實參個數相等,輸出正確結果
sum(100, 400, 500, 700); // 實參個數多於形參,只取到形參的個數
sum(200); // 實參個數少於形參,多的形參定義爲undefined,結果爲NaN

注意: 在JavaScript中,形參的默認值是 undefined。

3.4 小結

  • 函數可以帶參數也可以不帶參數
  • 聲明函數的時候,函數名括號裏面的是形參,形參的默認值爲 undefined
  • 調用函數的時候,函數名括號裏面的是實參
  • 多個參數中間用逗號分隔
  • 形參的個數可以和實參個數不匹配,但是結果不可預計,我們儘量要匹配

知識總結

  • 如果實參的個數多餘形參,形參如何接收實參?
    • 如果實參的個數多餘形參,形參將按照順序依次接收實參,剩餘的實參不被接收值
  • 如果實參的個數少於形參,形參如何接收實參
    • 如果實參的個數少於形參,形參將按照順序依次接收實參,多餘的形參接收不到實參,默認值爲undefined
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>19 - 函數形參實參個數匹配</title>
    <script>
        // 函數形參實參個數匹配
        function getSum(num1, num2) {
            console.log(num1 + num2);
        }
        // 1. 如果實參的個數和形參的個數一致 則正常輸出結果
        getSum(1, 2); // 3

        // 2. 如果實參的個數多於形參的個數  會取到形參的個數 
        getSum(1, 2, 3); // 3

        // 3. 如果實參的個數小於形參的個數  多於的形參定義爲undefined  最終的結果就是 NaN
        // 形參可以看做是不用聲明的變量  num2 是一個變量但是沒有接受值  結果就是undefined 
        getSum(1); // NaN
        // 建議 我們儘量讓實參的個數和形參相匹配
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


20 - 函數的返回值

4. 函數的返回值

4.1 return語句

有的時候,我們會希望函數將值返回給調用者,此時通過使用 return 語句就可以實現。

return 語句的語法格式如下:

// 聲明函數
function 函數名(){
   ...
   return 需要返回的值;
}
// 調用函數
函數名(); // 此時調用函數就可以得到函數體內return 後面的值
  • 在使用 return 語句時,函數會停止執行,並返回指定的值
  • 如果函數 沒有return ,返回的值是 undefined

有的時候,我們會希望函數將值返回給調用者,此時通過使用 return 語句就可以實現。

例如,聲明瞭一個sum()函數,該函數的返回值爲666,其代碼如下:

// 聲明函數
function sum(){
   ...
   return 666}
// 調用函數
sum(); // 此時 sum 的值就等於666,因爲 return 語句會把自身後面的值返回給調用者
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>20 - 函數的返回值</title>
    <script>
        // 1.函數是做某件事或者實現某種功能
        // function cook(aru) {
        //     console.log(aru);
        // }
        // cook('大肘子');

        // 2. 函數的返回值格式
        // function 函數名() {
        //     return 需要返回的結果;
        // }
        // 函數名();
        // (1) 我們函數只是實現某種功能,最終的結果需要返回給函數的調用者函數名() 通過return 實現的
        // (2) 只要函數遇到return 就把後面的結果 返回給函數的調用者  函數名() = return後面的結果

        // 3. 代碼驗證
        function getResult() {
            return 666;
        }
        getResult(); // getResult() = 666
        console.log(getResult()); // 666

        function cook(aru) {
            return aru;
        }
        console.log(cook('大肘子')); // 大肘子

        // 4. 求任意兩個數的和
        function getSum(num1, num2) {
            return num1 + num2;
        }
        console.log(getSum(1, 2)); // 3
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


21 - 求兩個數的最大值(函數版)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>21 - 求兩個數的最大值(函數版)</title>
    <script>
        // 利用函數 求兩個數的最大值
        function getMax(num1, num2) {
            // if (num1 > num2) {
            //     return num1;
            // } else {
            //     return num2;
            // }
            return num1 > num2 ? num1 : num2;
        }
        console.log(getMax(1, 3)); // 3
        console.log(getMax(11, 3)); // 11
    </script>
</head>
<body>

</body>
</html>

22 - 求數組中的最大值(函數版)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>22 - 求數組中的最大值(函數版)</title>
    <script>
        // 定義一個獲取數組中最大數的函數
        function getArrMax(arr) { // arr 接受一個數組  arr =  [5,2,99,101,67,77]
            var max = arr[0];
            for (var i = 1; i <= arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            return max;
        }
        // getArrMax([5, 2, 99, 101, 67, 77]); // 實參是一個數組送過去
        // 在我們實際開發裏面,我們經常用一個變量來接受 函數的返回結果 使用更簡單
        var re1 = getArrMax([5, 2, 99, 101, 67, 77]);
        var re2 = getArrMax([3, 77, 44, 99, 143]);
        console.log('最大值爲 ' + re1); // 最大值爲 101
        console.log('最大值爲 ' + re2); // 最大值爲 143
    </script>
</head>
<body>

</body>
</html>

23 - 函數返回值注意事項

4.2 return 終止函數

return 語句之後的代碼不被執行。

function add(num1,num2){
    //函數體
    return num1 + num2; // 注意:return 後的代碼不執行
    alert('我不會被執行,因爲前面有 return');
}
var resNum = add(21,6); // 調用函數,傳入兩個實參,並通過 resNum 接收函數返回值
alert(resNum); // 27

4.3 return的返回值

return只能返回一個值 。 如果用逗號隔開多個值,以最後一個爲準。

function add(num1,num2){
    //函數體
    return num1,num2;
}
var resNum = add(21,6); // 調用函數,傳入兩個實參,並通過 resNum 接收函數返回值
alert(resNum); // 6

案例:創建一個函數,實現兩個數之間的加減乘除運算,並將結果返回

var a = parseFloat(prompt('請輸入第一個數'));
var b = parseFloat(prompt('請輸入第二個數'));
function count(a, b) {
    var arr = [a + b, a - b, a * b, a / b];
    return arr;
}
var result = count(a, b);
console.log(result);

4.4 函數沒有return返回undefined

函數都是有返回值的

  1. 如果有return 則返回 return 後面的值
  2. 如果沒有return 則返回 undefined

4.5 break,continue,return的區別

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

知識總結

  • 函數中如果執行了return語句,即結束當前函數,不再繼續向下執行代碼
  • 函數中只能有一個返回值,即使寫了多個return,也只能執行第一個return語句
  • 函數中只能返回一個具體的數據,如果返回了多個數據,則只會返回最後一個數據
  • 函數中通過return關鍵詞指定函數返回值
  • 函數中如果沒有指定返回值,則函數默認返回值爲undefined
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>23 - 函數返回值注意事項</title>
    <script>
        // 函數返回值注意事項
        // 1. return 終止函數
        function getSum(num1, num2) {
            return num1 + num2; // return 後面的代碼不會被執行
            // alert('我是不會被執行的哦!');
        }
        console.log(getSum(1, 2)); // 3

        // 2. return 只能返回一個值
        function fn(num1, num2) {
            return num1, num2; // 返回的結果是最後一個值
        }
        console.log(fn(1, 2)); // 2

        // 3.  我們求任意兩個數的 加減乘數結果
        function getResult(num1, num2) {
            return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
        }
        var re = getResult(1, 2); // 返回的是一個數組
        console.log(re); // Array(4) [ 3, -1, 2, 0.5 ]

        // 4. 我們的函數如果有return 則返回的是 return 後面的值,如果函數麼有 return 則返回undefined
        function fun1() {
            return 666;
        }
        console.log(fun1()); // 返回 666
        function fun2() {

        }
        console.log(fun2()); // 函數返回的結果是 undefined
    </script>
</head>
<body>

</body>
</html>

在這裏插入圖片描述


通過榨汁機看透函數

在這裏插入圖片描述


作業

  1. 寫一個函數,用戶輸入任意兩個數字的任意算術運算(簡單的計算器小功能),並能彈出運算後的結果。
  2. 寫一個函數,用戶輸入任意兩個數字的最大值,並能出彈運算後的結果。
  3. 寫一個函數,用戶輸入任意三個不同數字的最大值,並能彈出運算後的結果。
  4. 寫一個函數,用戶輸入一個數判斷是否是素數,並返彈出回值(又叫質數,只能被1和自身整數的數)
<!DOCTYPE html>
<html>
<head>
	<meta charset='utf-8'>
	<title>作業</title>
	<script>
     	// 寫一個函數,用戶輸入任意兩個數字的任意算術運算,並彈出運算後的結果
	    function getResult(){
	        var sum;
            var num1 = prompt('請輸入第一個數:');
            var num2 = prompt('請輸入第二個數:');
            var operator = prompt('請輸入你想要的運算符:')
            switch (operator) {
                case '+':
                    sum = parseInt(num1) + parseInt(num2); // 接受的是字符型
                    break;
                case '-':
                    sum = num1 - num2;
                    break;
                case '*':
                    sum = num1 * num2;
                    break;
                case '/':
                    sum = num1 / num2;
                    break;
                default:
                	return alert('符號錯誤');
                    break;
            }
            document.write('計算結果是:' + num1 + operator + num2 + '=' + sum + '<br>');
	    }
	    getResult(); // 不要忘了調用函數

	    // 2. 寫一個函數,用戶輸入任意兩個數字的最大值,並能出彈運算後的結果。
	    function getTwoMax() {
            var num1 = parseInt(prompt('請輸入第一個數:'));
            var num2 = parseInt(prompt('請輸入第二個數:'));
            var max = num1 > num2 ? num1 : num2; // max一定要放num後面定義,不然就是undefined
            document.write('最大值:' + max + '<br>'); // 前面不要return,不然後面的句子輸出不了
        }
        getTwoMax();

        // 3. 寫一個函數,用戶輸入任意三個不同數字的最大值,並能彈出運算後的結果。 
        function getThreeMax() {
            var a = parseInt(prompt('請輸入第一個數:'));
            var b = parseInt(prompt('請輸入第二個數:'));
            var c = parseInt(prompt('請輸入第三個數:'));
            var arr = [a, b, c];
            var max = arr[0];
            for (var i = 1; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            document.write('最大值是:' + max + '<br>');
        }
        getThreeMax();

        // 4. 寫一個函數,用戶輸入一個數判斷是否是素數,並返彈出回值(又叫質數,只能被1和自身整數的數)
        function getPrime() {
            var num = Number(prompt('請輸入一個正整數,判斷此數是不是素數')); // 要判斷的數
		    var flag = true; // 假設變量  值爲true 是素數 
		    for( var i = 2 ; i < num ; i++ ){
		        if( num % i == 0 ){ // 滿足這個條件  說明有因子了  不是素數
		            flag = false; // 不是素數
		            break;
		        }
		    }
		    // 如果假設成立  
		    if( flag && (num != 1 & num != 0) ){ // 1和0不是素數
		        document.write( num + '是素數' + '<br>');
		    }else{
		        document.write( num + '不是素數' + '<br>' );
		    }
        }
        getPrime();
	 </script>
</head>
<body>

</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章