1. 什么是函數(shù)?
- 將特定的代碼片段, 抽取成為一個(gè)獨(dú)立運(yùn)行的實(shí)體.
2. 函數(shù)的好處
- 重復(fù)使用
- 方便閱讀
- 方便理解與維護(hù)
3. 函數(shù)的創(chuàng)建方式
- 函數(shù)定義必須使用 function
- 函數(shù)的命名規(guī)則與變量一致
(1) 普通函數(shù): function 函數(shù)名稱() {}
(2) 匿名函數(shù): var 函數(shù)名稱 = function() {}
(3) 構(gòu)造函數(shù): var 函數(shù)名稱 = new Function('param1', 'param2', ..., "代碼體");
// (1) 普通函數(shù)
function add1(n, m){
return n + m;
}
console.log(add1(1,2 )); // 3
// (2) 匿名函數(shù)
var add2 = function(n, m){
return n + m;
}
console.log(add2(1,2 )); // 3
// (3) 構(gòu)造函數(shù)
var add3 = new Function('n', 'm', "var res = n + m; return res");
console.log(add3(1,2 )); // 3
<!-- (4)DOM 事件驅(qū)動函數(shù) -->
<body>
<button id="btn">點(diǎn)擊</button>
<script>
function fn() {
alert('hi');
}
// 1.獲取到按鈕,給按鈕綁定點(diǎn)擊事件
var btn = document.getElementById('btn');
// 2.點(diǎn)擊的時(shí)候,fn會自動補(bǔ)全一個(gè)小括號,稱為事件驅(qū)動函數(shù)
btn.onclick = fn;
</script>
</body>
5. 形參
- 形式的參數(shù),就是一個(gè)占位
- 是一個(gè)局部變量
- 不確定因素做形參
- 默認(rèn)是undefined, 調(diào)用時(shí)才能明確類型與具體值
6. 實(shí)參
7. return關(guān)鍵字
- 終止函數(shù), 并返回結(jié)果
- 若沒有return, 則返回undefined
8. arguments
- 只能在函數(shù)內(nèi)部出現(xiàn)
- 用于動態(tài)接收實(shí)參
- 是一個(gè)偽數(shù)組
- 通過下標(biāo)取值 -> arguments[index]
- arguments.length 輸出當(dāng)前函數(shù)存儲的參數(shù)個(gè)數(shù)
function add() {
var res = 0;
for (var i = 0; i < arguments.length; i++) {
res += arguments[i];
}
return res;
}
console.log(add(10, 20, 30, 40, 50)); // 150
9. 作用域
- 函數(shù)作用的范圍
(1) 全局作用域 -> 函數(shù)外部的
(2)局部作用域 -> 函數(shù)內(nèi)部的
10. 作用域鏈
- 在函數(shù)內(nèi)部尋找某個(gè)變量的值, 首先會在當(dāng)前函數(shù)內(nèi)查找, 如果找不到就一層一層向外層函數(shù)尋找, 這個(gè)過程就是作用域鏈
11.遞歸
- 遞歸就是函數(shù)自己調(diào)用自己, 要有臨界點(diǎn)(結(jié)束條件)
- 循環(huán)能做的事, 遞歸都能做, 但是遞歸的性能比循環(huán)要弱
- 遞歸就是代碼復(fù)用
12. 遞歸的使用方法
- 首先找臨界值(無需計(jì)算, 就能獲得的值)
- 找這一次和上一次的關(guān)系
- 假設(shè)當(dāng)前函數(shù)已經(jīng)可以使用, 調(diào)用自身計(jì)算上一次
13. 遞歸的使用場景
- 快速排序
- 對象的深拷貝
- 多級菜單
- node.js對文件的遍歷
14.遞歸拓展 - 面試題
- 假如大家去面試, 如果被問到遞歸相關(guān)知識, 說明面試官對你要求挺高(遞歸考的是內(nèi)存管理機(jī)制), 但是公司明文禁止使用遞歸
-
禁止使用遞歸的原因: 假如傳遞過來的值是不確定的, 一旦發(fā)生故障, 會瞬間開辟很多個(gè)內(nèi)存空間, 可能會導(dǎo)致藍(lán)屏或者死機(jī)等風(fēng)險(xiǎn).
// eg. 使用遞歸求 1~100 的和
// 臨界點(diǎn): num == 1
// sum(100) = sum(99) + 100 -> sum(n) = sum(n - 1) + n
function add(num){
if(num == 1){
return 1;
}
return add(num - 1) + num;
}
console.log(add(100)); // 5050
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。