函數(shù)的概念
對于 js 來說,函數(shù)就是把任意一段代碼放在一個 盒子 里面
在我想要讓這段代碼執(zhí)行的時候,直接執(zhí)行這個 盒子 里面的代碼就行
函數(shù)也可以叫方法,將一段公共的代碼封裝起來,下次直接使用
定義一次可以多次調(diào)用
函數(shù)的兩個階段(重點)
按照我們剛才的說法,兩個階段就是 放在盒子里面 和 讓盒子里面的代碼執(zhí)行
- 放在盒子里面(定義函數(shù))
- 讓盒子里面的代碼執(zhí)行(調(diào)用函數(shù))
函數(shù)定義階段
- 定義階段就是我們把代碼 放在盒子里面
- 我們就要學習怎么 放進去,也就是書寫一個函數(shù)
- 我們有兩種定義方式 聲明式 和 賦值式
賦值式
- 其實就是和我們使用 var 關(guān)鍵字是一個道理了
- 首先使用 var 定義一個變量,把一個函數(shù)當作值直接賦值給這個變量就可以了
- 語法:
var fn = function () {
// 一段代碼
}
// 不需要在 function 后面書寫函數(shù)的名字了,因為在前面已經(jīng)有了
函數(shù)調(diào)用階段
- 就是讓 盒子里面 的代碼執(zhí)行一下
- 讓函數(shù)執(zhí)行
- 兩種定義函數(shù)的方式不同,但是調(diào)用函數(shù)的方式都以一樣的調(diào)用一個函數(shù)
- 函數(shù)調(diào)用就是直接寫 函數(shù)名() 就可以了
// 聲明式函數(shù)
function fn() {
console.log('我是 fn 函數(shù)')
}
?
// 調(diào)用函數(shù)
fn()
?
// 賦值式函數(shù)
var fn2 = function () {
console.log('我是 fn2 函數(shù)')
}
?
// 調(diào)用函數(shù)
fn()
注意: 定義完一個函數(shù)以后,如果沒有函數(shù)調(diào)用,那么寫在 {} 里面的代碼沒有意義,只有調(diào)用以后才會執(zhí)行
調(diào)用上的區(qū)別
- 雖然兩種定義方式的調(diào)用都是一樣的,但是還是有一些區(qū)別的
- 聲明式函數(shù): 調(diào)用可以在 定義之前或者定義之后
// 可以調(diào)用
fn()
// 聲明式函數(shù)
function fn() {
console.log('我是 fn 函數(shù)')
}
?
// 可以調(diào)用
fn()
- 賦值式函數(shù): 調(diào)用只能在 定義之后
// 會報錯
fn()
?
// 賦值式函數(shù)
var fn = function () {
console.log('我是 fn 函數(shù)')
}
?
// 可以調(diào)用
fn()
函數(shù)的參數(shù)(重點)
- 我們在定義函數(shù)和調(diào)用函數(shù)的時候都出現(xiàn)過 ()
- 現(xiàn)在我們就來說一下這個 () 的作用
- 就是用來放參數(shù)的位置
- 參數(shù)分為兩種 行參 和 實參
// 聲明式
function fn(行參寫在這里) {
// 一段代碼
}
?
fn(實參寫在這里)
?
// 賦值式函數(shù)
var fn = function (行參寫在這里) {
// 一段代碼
}
fn(實參寫在這里)
腳下留心:
- function和函數(shù)名之間必須空格,函數(shù)名的命名規(guī)則和命名規(guī)范同變量
- 定義函數(shù)參數(shù):叫形參,多個之間逗號隔開
- 調(diào)用函數(shù)參數(shù):叫實參,多個之間逗號隔開
- 函數(shù)的形參個數(shù)和實參個數(shù),必須一樣,否則undefined 可能會導致代碼有瑕疵
- 函數(shù)的形參順序和實參順序,必須一致,否則邏輯BUG 大瑕疵
行參和實參的作用
行參
就是在函數(shù)內(nèi)部可以使用的變量,在函數(shù)外部不能使用
每寫一個單詞,就相當于在函數(shù)內(nèi)部定義了一個可以使用的變量(遵循變量名的命名規(guī)則和命名規(guī)范)
多個單詞之間以 , 分隔
如果只有行參的話,那么在函數(shù)內(nèi)部使用的值個變量是沒有值的,也就是 undefined
行參的值是在函數(shù)調(diào)用的時候由實參決定的
實參
在函數(shù)調(diào)用的時候給行參賦值的
也就是說,在調(diào)用的時候是給一個實際的內(nèi)容的
函數(shù)內(nèi)部的行參的值,由函數(shù)調(diào)用的時候傳遞的實參決定
多個參數(shù)的時候,是按照順序一一對應(yīng)的
function fn(num1, num2) {
// 函數(shù)內(nèi)部可以使用 num1 和 num2
}
// 函數(shù)本次調(diào)用的時候,書寫的參數(shù)是 100 和 200
// 那么本次調(diào)用的時候,函數(shù)內(nèi)部的 num1 就是 100,num2 就是 200
fn(100, 200)
參數(shù)的順序和個數(shù)(細節(jié))
- 函數(shù)的形參個數(shù)和實參個數(shù),必須一樣,否則undefined 可能會導致代碼有瑕疵
- 函數(shù)的形參順序和實參順序,必須一致,否6則邏輯BUG 大瑕疵
函數(shù)(return★)
明確需求:
// 定義計算工資函數(shù)
function money(day, qian) {
console.log('工作', day, '天,每天', qian, '塊,共計:', day*qian);
}
// 調(diào)用
money(30, 1000);
// 有時候調(diào)用完函數(shù)后,需要里面的結(jié)果進一步判斷等 關(guān)鍵怎么獲取呢?
說明:在實在工作中,調(diào)用函數(shù)有時候需要直接輸出,有時候需要返回數(shù)據(jù)讓后面代碼進一步判斷操作
思考:直接輸出五種輸出語句根據(jù)情況選擇,但是如何返回結(jié)果數(shù)據(jù)呢?
解決:在函數(shù)中使用return關(guān)鍵詞
語法
// 定義
function 函數(shù)名(形參1,....,形參n) {
// 代碼
return 數(shù)據(jù);
}
?
// 調(diào)用
函數(shù)名(實參1,....,實參n);
腳下留心:
默認return undefined
return 返回的意思,作用1: 返回值、作用2: 終斷函數(shù)
返回值
// 1.定義計算工資函數(shù)
function money(day, qian) {
// console.log('工作', day, '天,每天', qian, '塊,共計:', dayqian);
return dayqian;
}
?
// 2.聲明變量接受函數(shù)返回的結(jié)果
var data = money(30, 1000);
alert(data);
?
// 3.實戰(zhàn)工作中可以進一步處理data
終斷函數(shù)
- 當我開始執(zhí)行函數(shù)以后,函數(shù)內(nèi)部的代碼就會從上到下的依次執(zhí)行
- 必須要等到函數(shù)內(nèi)的代碼執(zhí)行完畢
- 而 return 關(guān)鍵字就是可以在函數(shù)中間的位置停掉,讓后面的代碼不在繼續(xù)執(zhí)行
function fn() {
console.log(1)
console.log(2)
console.log(3)// 寫了 return 以后,后面的 4 和 5 就不會繼續(xù)執(zhí)行了
// return 666;
return; //相當于return undefined
//因為return終止代碼執(zhí)行,相當于循環(huán)中的break
//腳下留心:函數(shù)終止必須用return,循環(huán)終止必須用break
console.log(4)
console.log(5)
}
?
// 函數(shù)調(diào)用
fn()
函數(shù)(知識點總結(jié))
函數(shù)三要素
函數(shù)三要素包括:函數(shù)名、參數(shù)、返回值
- 函數(shù)名:必寫
- 參 數(shù):根據(jù)需求,看函數(shù)體是否需要根據(jù)不同情況 變化
- 返回值:根據(jù)需求,看調(diào)用后,后續(xù)代碼是否要根據(jù)函數(shù)結(jié)果進一步判斷
定義函數(shù)參數(shù)叫:形參
調(diào)用函數(shù)參數(shù)叫:實參
形參個數(shù)和實參個數(shù)不一樣:則沒傳的undefined、可能會帶來代碼問題
形參順序和實參順序不一致:邏輯錯誤 絕對大BUGreturn作用
1返回結(jié)果數(shù)據(jù)(注:return不寫則默認或return; 都是 return undefined)
2終止代碼執(zhí)行
函數(shù)的優(yōu)點
- 明確:什么是函數(shù),就是將一段代碼的封裝起來,一次定義多次調(diào)用
- 好處:
1.封裝、減少代碼冗余,復用代碼
2.方便維護開發(fā) 一個地方改其他地方都好了