目錄
一、函數
1.1 聲明和調用
1.2 形參和實參
1.3 返回值
二、作用域
2.1 全局作用域
2.2 局部作用域
三、匿名函數
3.1 函數表達式
3.2 立即執行函數
一、函數
理解函數的封裝特性,掌握函數的語法規則
1.1 聲明和調用
函數可以把具有相同或相似邏輯的代碼“包裹”起來,通過函數調用執行這些被“包裹”的代碼邏輯,這么做的優勢是有利于精簡代碼方便復用。
聲明(定義)一個完整函數包括關鍵字、函數名、形式參數、函數體、返回值5個部分
調用
聲明(定義)的函數必須調用才會真正被執行,使用 ()
調用函數。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基礎 - 聲明和調用</title>
</head>
<body><script>// 聲明(定義)了最簡單的函數,既沒有形式參數,也沒有返回值function sayHi() {console.log('嗨~')}// 函數調用,這些函數體內的代碼邏輯會被執行// 函數名()sayHi()// 可以重復被調用,多少次都可以sayHi()</script>
</body>
</html>
參數
通過向函數傳遞參數,可以讓函數更加靈活多變,參數可以理解成是一個變量。
聲明(定義)一個功能為打招呼的函數
-
傳入數據列表
-
聲明這個函數需要傳入幾個數據
-
多個數據用逗號隔開
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基礎 - 函數參數</title>
</head>
<body><script>// 聲明(定義)一個功能為打招呼的函數// function sayHi() {// console.log('嗨~')// }// 調用函數// sayHi()// 這個函數似乎沒有什么價值,除非能夠向不同的人打招呼// 這就需要借助參數來實現了function sayHi(name) {// 參數 name 可以被理解成是一個變量console.log(name)console.log('嗨~' + name)}// 調用 sayHi 函數,括號中多了 '小明'// 這時相當于為參數 name 賦值了sayHi('小明')// 結果為 小明// 再次調用 sayHi 函數,括號中多了 '小紅'// 這時相當于為參數 name 賦值了sayHi('小紅') // 結果為 小紅</script>
</body>
</html>
總結:
-
聲明(定義)函數時的形參沒有數量限制,當有多個形參時使用
,
分隔 -
調用函數傳遞的實參要與形參的順序一致
1.2 形參和實參
形參:聲明函數時寫在函數名右邊小括號里的叫形參(形式上的參數)
實參:調用函數時寫在函數名右邊小括號里的叫實參(實際上的參數)
形參可以理解為是在這個函數內聲明的變量(比如 num1 = 10)實參可以理解為是給這個變量賦值
開發中盡量保持形參和實參個數一致
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基礎 - 函數參數</title>
</head>
<body><script>// 聲明(定義)一個計算任意兩數字和的函數// 形參 x 和 y 分別表示任意兩個數字,它們是兩個變量function count(x, y) {console.log(x + y);}// 調用函數,傳入兩個具體的數字做為實參// 此時 10 賦值給了形參 x// 此時 5 賦值給了形參 ycount(10, 5); // 結果為 15</script>
</body>
</html>
1.3 返回值
函數的本質是封裝(包裹),函數體內的邏輯執行完畢后,函數外部如何獲得函數內部的執行結果呢?要想獲得函數內部邏輯的執行結果,需要通過 return
這個關鍵字,將內部執行結果傳遞到函數外部,這個被傳遞到外部的結果就是返回值。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>JavaScript 基礎 - 函數返回值</title>
</head>
<body><script>// 定義求和函數function count(a, b) {let s = a + b// s 即為 a + b 的結果// 通過 return 將 s 傳遞到外部return s}// 調用函數,如果一個函數有返回值// 那么可將這個返回值賦值給外部的任意變量let total = count(5, 12)</script>
</body>
</html>
總結:
-
在函數體中使用return 關鍵字能將內部的執行結果交給函數外部使用
-
函數內部只能出現1 次 return,并且 return 下一行代碼不會再被執行,所以return 后面的數據不要換行寫
-
return會立即結束當前函數
-
函數可以沒有return,這種情況默認返回值為 undefined
二、作用域
通常來說,一段程序代碼中所用到的名字并不總是有效和可用的,而限定這個名字的可用性的代碼范圍就是這個名字的作用域。
作用域的使用提高了程序邏輯的局部性,增強了程序的可靠性,減少了名字沖突。
2.1 全局作用域
作用于所有代碼執行的環境(整個 script 標簽內部)或者一個獨立的 js 文件
處于全局作用域內的變量,稱為全局變量
2.2 局部作用域
作用于函數內的代碼環境,就是局部作用域。 因為跟函數有關系,所以也稱為函數作用域。
處于局部作用域內的變量稱為局部變量
如果函數內部,變量沒有聲明,直接賦值,也當全局變量看,但是強烈不推薦
但是有一種情況,函數內部的形參可以看做是局部變量。
三、匿名函數
函數可以分為具名函數和匿名函數
匿名函數:沒有名字的函數,無法直接使用。
3.1 函數表達式
// 聲明
let fn = function() { console.log('函數表達式')
}
// 調用
fn()
3.2 立即執行函數
(function(){ xxx })();
(function(){xxxx}());
無需調用,立即執行,其實本質已經調用了
多個立即執行函數之間用分號隔開