【定义】
可以实现一定的功能(封装)
函数是一等公民(字面量声明)
【创建函数的方式】
1、字面量创建
function 函数名(){
函数体;
}
2、函数表达式/匿名函数表达式
let 函数名 = function(){
函数体;
}
3、构造函数
let 函数名 = new Function();
【函数的调用】
函数名();
【参数】
实参:函数调用时的参数
形参:声明函数时的参数
不定参数:(形参比实参多,获取多的参数)
使用扩展运算符接收,只能写在最后一个形参上
注:
1、相同形参,取后面的值
2、类数组(arguments)
不是数组,没有push方法
获取当前函数的所有实参
【随机数】
Math.random 会随机生成一个0-1之间的数(不会取到1)
【默认值】
若形参没有具体的实参,可以给形参添加默认值(默认值参数尽量放在后面)
书写格式:
function 函数名(形参 = 默认值){
代码块;
}
调用: 函数名();
函数名.length 获取默认值参数之前的形参个数(不包含不定参数)
【箭头函数】
书写格式:
1、函数名 => 函数体(如果只有一条不需要加大括号,可以省略function)
2、(形参1,形参2,…) => 函数体(如果只有一条不需要加大括号,这是一条返回语句,不需要加return)
3、形参(形参只有一个不需要写小括号) => 函数体
【回调函数】
把一个函数A当作参数传给另一个函数B使用
案例1、
排序
sort.((a,b) => a - b);
案例2、
数组名.every(参数=>条件)
功能:如果数组中的每一个值都满足条件,返回true,有一个不满足就返回false
案例3、
数组名.some(参数=>条件)
功能:如果数组中的有一个值满足条件,返回true,所有都不满足就返回false
案例4、
筛选/过滤
数组名.fliter(参数=>条件)
功能:返回满足条件的值
案例5、
数组名.map(参数=>条件)
功能:返回一个新数组,数组里的内容是原数组的每个值是否满足条件
案例6、
数组名.forEach(参数 => 条件)
功能:对数组中的每个值进行操作(没有返回值,即返回undefined)
map和forEach的区别
map有返回值
forEach没有返回值
【立即执行函数(IIFE)】
创建即调用,调用后即销毁
优点:释放资源
(function f68(){
console.log(“zhaolan”);
})();
(function f68(){
console.log(“zhaolan”);
}());
【变量提升、函数提升】 标识符可以先使用后声明(即不会报错)
变量提升:只提升变量的声明(仅限var声明的变量,不包含函数里var声明的变量)
函数提升:只提升字面量声明的函数,提升整个函数体