函数的理解
- 函数可以提高代码三性:(复用性,维护性,扩展性)
- 函数可以隔离变量作用域
- 函数可以控制代码执行,函数不调用不执行
- 函数的封装没有绝对的对错,取决于书写代码时的心情以及对于业务的认知等等条件,一件事就是一个函数
所有函数,无论是调用还是执行,均要清楚三要素:意义,参数,返回值
形参,实参,与返回值的理解
完成一件事的条件,就是参数,参数分为
形参
和实参
- 形参是抽象的,实参是具体的
- 参数为了
解耦
,一个函数中有多种情况,多种情况的不同点就是参数,也就是解耦 - 实参就是形参的值,换言之,你想对一个内部变量赋值,可以通过实参传递,通过形参声明变量
- 封装函数的时候,参数宁多不少,这样可以提升其复用性,多的可以设置为可选参数(非必填参数)
- 返回值就是一个函数的执行结果
如果需要将内部变量传递到外部,那就把它设置成该函数的返回值,这样就可以用一个变量接受它的执行结果,从而得到该变量的值
回调
封装一个过滤数组的函数,从而总结(感受)一下原生filter的意义参数返回值
filter
- 意义:创建一个新数组, 其不包含通过所提供函数过滤掉的元素。(只包含通过测试的元素组成的数组)
- 参数
callback
- 用来测试每个元素的函数,它可以接收三个参数:
- element
- 用于测试的当前值。
- index可选
- 用于测试的当前值的索引。
- array可选
- 调用 every 的当前数组。
thisArg
可选- 执行 callback 时,用于 this 的值。
- 返回值:由通过测试(没被过滤)的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
//声明一个数组
let arr = [1, 2, 3, 4, 5, 6, 7]
function Filter(arr, fun) {
//声明一个新数组以接受没被过滤的键值
let newArr = []
for(let i = 0; i < arr.length; i++) {
let val = arr[i]
//将符合要求的过滤掉,其余推到新数组
if(fun(val)) {
continue;
} else {
newArr.push(val)
}
}
//返回新数组
return newArr
}
//打印输出过滤掉 能被3整除的键值 的数组
console.log(filter(arr, function(val) {
return (val % 3 == 0);
}))
查看reduce函数 意义参数返回值
查看every函数 意义参数返回值
reduce
- 意义:
reduce()
方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
- 参数
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
- 返回值:函数累计处理的结果
- 语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
- 参数
- callback
- 用来测试每个元素的函数,它可以接收三个参数:
- element
- 用于测试的当前值。
- index可选
- 用于测试的当前值的索引。
- array可选
- 调用 every 的当前数组。
initialValue
可选- 作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
- callback
- 意义:
every
- 语法:
arr.every(callback(element[, index[, array]])[, thisArg])
- 意义:
every()
方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。返回一个布尔值。若接收到空数组,返回结果为true
- 参数
callback
- 用来测试每个元素的函数,它可以接收三个参数:
- element
- 用于测试的当前值。
- index可选
- 用于测试的当前值的索引。
- array可选
- 调用 every 的当前数组。
thisArg
可选- 执行 callback 时,用于 this 的值。
- 返回值:如果回调函数的每一次返回都通过某个指定函数的测试,返回 true ,否则返回 false。
闭包
递归
连贯操作
自执行函数(函数的自执行)
- 语法: