功能:可以实现一定的功能(封装)
创建函数的方式:
1、字面量创建
function 函数名 (参数) {代码块/函数体}
* 不管参数多少个,实参必须要和形参保持一致性
函数的调用: 函数名();
* 函数名不要大写字母,大写就是构造函数
返回值: return "返回的数据";
* return有值就返回值,没有就始终返回undefined
function f68(){
// console.log("liqiang");
// // return ;
// }
// console.log(f68); //没有小括号输出的是函数体
// console.log(f68()); //先调用函数f68(),再输出log
// f68(); //调用函数
2、函数/匿名表达式
* let 函数名 = function(){}
function后面的name可以不写
* function和let创建函数区别:只是function后面的name打印不一样
*/
// let f69 = function f70() {
// console.log("ccccsshello");
// }
// console.log(f68.name);
// console.log(f69.name);
// console.log(f70());
// f69();
3、构造函数
* let 函数名 = new Function();
// let f70 = new Function(
// console.log("helloworld");
// // ,console.log("cqs");
// );
// f70();
参数: 形参/实参
函数只有加了参数才能千变万化
* 实参: 实际参数,用户输入的值(调用时传的参数)
* 形参: 形式参数,接收实际的值(声明时的参数)
function aa(name,price,type){
let f68 = [name,price,type];
return f68;
}
// console.log(aa);
console.log(aa("11",2,"22"));
// aa();
不定参数
如果实参比形参多,想获取多的参数则用扩展运算符接收
注:只能写在最后一个形参上
// function f68(a,b,c,...d){
// console.log(a,b,c); //1,2,3
// console.log("D",d);//[4,5]
判断是不是数组:
// // if(Array.isArray(f68)){
// // console.log("true");
// // }else{
// // console.log("false");
// // }
获取所有的参数:arguments类数组
获取当前函数实参的值,放在外面不行
// console.log(arguments[0]); //1
// console.log(arguments.length); //5
// // arguments.push("A"); arguments不是数组,因此没有push方法
// console.log(arguments);
// }
// f68(1,2,3,4,5);
相同形参,取后面的值(相当于又给第二个赋值)
// function f68(a,a,b){
// console.log(a,c); //2,3
// }
// f68(1,2,3);
默认值:书写格式: function 函数名(形参=默认值){}
//有值就用实参的值,没有就用形参赋的值(默认值只存在形参上)
function f68(a,b){
console.log(a+b); //nan
}
f68();
function f68(a=1,b=2){
console.log(a+b); //5
}
f68(2,3);
属性:.length
函数名.length获取形参的个数(不包含不定参数)
在计算的过程中如果碰到形参的默认值就不执行
// function f68(a, b, c) {
// console.log(f68.length); //f68(); 3; f68(1,2); 3
// }
// f68();
// function f68(a=2, b, c,...d) {
// console.log(f68.length); //c=2 2; a=2 0
// }
// f68(1,2);
箭头函数
格式1:省略function
// 函数名 箭头 函数体(如果只有一条不加大括号)
// f68 => console.log("f68");
// let f69 = f68 => console.log("f68");
// f69();
格式2: 省略函数名
// 形参 箭头 函数体(如果只有一条不加大括号,这是一条返回语句,不需要加return)
// (a,b) => a+b
// let f69 = (a, b) => a + b;
// console.log(f69(1, 2)); //3
格式3: 省略function和函数名
// 形参(形参如果只有一个,可以不加小括号) 箭头 函数体
// a => a+1;
// let f69 = a => a + 1;
// console.log(f69(2)); //3
回调函数
//把一个函数A当做参数传给另一个函数B使用,则A是回调函数
下面的方法是数组的方法,里面要传一个函数
方法1:.sort 排序
:a-b就是升序,b-a降序
// let f68 = [8, 6, 7, 2, 5, 3, 1];
// // console.log(f68.reverse());
// // let f69= f68.sort();
// let f69 = f68.sort((a, b) => a - b);
// console.log(f69);
方法2: 数组名.every
数组名.every(参数=>条件)
//功能:如果数组的每个值都满足条件,返回true,有一个不满足就返回false
// let f68 = [8, 6, 7, 2, 5, 3, 4];
// let f70 = [2,4,6,8];
// let f69 = f68.every(index => index % 2 == 0);
// console.log(f69); //false
// let f69 = f70.every(index => index % 2 == 0);
// console.log(f69); //true
方法3: 数组名.some
数组名.some(参数=>条件)
//功能:如果数组中有一个值满足条件,返回true,所有值都不满足才返回false
// let f70 = [1,3,5,7];
// let f69 = f70.some(index => index % 2 == 1);
// console.log(f69); //true
方法4: 数组名.filter
筛选/过滤(即返回满足条件的值)数组名.filter(参数=>条件)
// let f68 = [8, 6, 7, 2, 5, 3, 4];
// let f69 = f68.filter(index => index % 2 == 0);
// console.log(f69); //true
方法5: 数组名.map
数组名.map(参数=>条件)
返回一个新数组,数组里的内容是原数组的每个值是否满足条件
// let f68 = [8, 6, 7, 2, 5, 3, 4];
// let f69 = f68.map(index => index % 2 == 0);
// console.log(f69); //true
方法6: 数组名.forEach
对数组中的每个值,进行操作 数组名.forEach(参数=>条件)
// 该方法没有返回值,即返回undefined
// let f68 = [8, 6, 7, 2, 5, 3, 4];
// f68.forEach(item=>console.log("F68:"+item));
// let f69 = f68.forEach(item=>console.log("F68:"+item));
// console.log(f69);
map和forEach的区别?
map有返回值,forEach没有返回值
// let f68 = [8, 6, 7, 2, 5, 3, 4];
// let f69 = f68.forEach(item=>item+1);
// // let f69 = f68.map(item=>item+1);
// console.log(f69);
IIFE:立即执行函数
创建即调用,调用后即销毁,不占用内存,只执行一次
// (function f68() {
// console.log(lq
);
// })();
// (function f68() {
// console.log(lq
);
// }());
交集、并集、差集
let set1 = new Set([1,2,3,2]);
let set2 = new Set([3,4,5]);
//交集 3
// let intersect = [...set1].filter(item => set2.has(item));
// console.log(intersect);
//差集 1,2
// let intersect = [...set1].filter(item => !set2.has(item));
// console.log(intersect);
//并集 1,2,3,4,5
let union = new Set([...set1,...set2]);
console.log(union);