函数
- 函数是一件事 一件事就是一个函数
- 函数的三要素是 意义 参数 返回值(无论调用还是声明 均要虑这三件事 方得始终)
- 函数的执行逻辑(根据形参声明变量,根据实参为形参一一赋值,执行函数体)
- 函数式编程
- 回调(回过头来调用的函数)callback
- 回调的意义:函数A的参数是一个函数B,函数B叫做回调函数(这里typeGroup()称为回调函数),函数B再函数A的函数体中被调用.
- 按照数据类型分组的函数
```javascript //根据某规则为某数组分组 //fun的意义:制定数组中每一个元素的组名 // 参数:每一个元素 // 返回值:每一个元素对应的组名// 按照数据类型分组的函数(意义:按照类型分组; 参数:数组; 返回值:对象)
function typeGroup(arr) {
let result = baseFun.fenzuFun(arr, function (item) {
return typeof (item);
});
return result;
}
// console.log(typeGroup(arr));
- 回调(回过头来调用的函数)callback
//函数意义:分组; 参数:数组,分组规则函数; 返回值:分组后的对象fanhuiObj{} function fenzuFun(arr, fun) { let fanhuiObj = {}; for (let i = 0; i < arr.length; i++) { let zuming = fun(arr[i]); if (!fanhuiObj[zuming]) { fanhuiObj[zuming] = []; } fanhuiObj[zuming].push(arr[i]); } return fanhuiObj; }
- 递归(自己调用自己的函数)
- 不到万万万不得已不应使用,因为这是在不断形成函数栈
- 深复制(要考虑到对象套对象{{}})
```javascript
// 深复制
function deepCopy(obj) {
let newObj = {}
for (let i in obj) {
if (typeof obj[i] === "object") {
newObj[i] = deepCopy(obj[i])
} else {
newObj[i] = obj[i]
}
}
return newObj
}
let dayinObj = deepCopy({name:"zhna",ooo:"kkk",K:[1,3,4,2],hui:"weare",duix:{kk:90}})
dayinObj.duix.kk="ceshi";
console.log(dayinObj);