函数
特点:低偶合,偶合,重复;
函数的定义:可以实现代码的复用,降低偶合度。
如何创建函数
格式1:字面量创建函数
关键字 自定义函数名【可省略】(参数){
函数体:由多个语句组成的。
}
格式2:命名函数表达式
关键字 自定义函数名 赋值符号 关键字 函数名称(参数【0到多个】){
函数体,多个语句组成
}
格式3:匿名函数表达式
自定义函数名1,可以实现函数功能
自定义函数名2,只是函数的属性(即函数的名字),但无函数功能(使用时会报错)
函数的调用
调用函数方式:JG445();
1、执行了代码
2、获取函数的返回值
一旦某个函数是空函数(没有函数体)
系统会默认添加return;
return只能返回一个值;
如果想返回多个值,可以使用数组的形式;
//函数的参数
放在函数的小括号里
参数分为两种:
形式参数(形参):函数在声明时,写在小括号里的变量;参数名字是自定义的
let JG445 = function(one,two){
let sum = one+two;
console.log(one,two,sum);
}
JG445(4,1);
实际参数(实参):函数在调用时,写在小括号里的参数;
JG445(4,1);//4,1就是参数;
注:在JS里形参和实参的个数可以不相等。
形参与实参相同个数:
以下两种情况都不会报错:
不定参数
形参比实参多:
多的形参的值是undefined
实参比形参多:
多的实参可以通过arguments进行获取
例子:arguments[i];i是下标(伪数组对象);
多出的实参,以数组形式存储
例:
funtion Pizza(a,b,...c){
console.log(a);//1
console.log(b);//2
console.log(c);//[3,4,5,6,7]
}
Pizza(1,2,3,4,5,6,7);
arguments实参列表;(使用的时候用下标来取值;)//arguments[2];
函数的属性
name
length
caller(告知谁可以调用当前函数)父级不能用,子级能用;
callee(可以指向当前调用arguments的函数)
【箭头函数】
格式:
关键字 变量名 赋值符号 () => {}
let pizza = () => {}
需求:带参数(1个)
let pizza = a => {}
需求:带多个参数
let pizza = (a,b) =>{}
需求:返回值
let pizza = (a,b)=>返回值
let pizza =(a,b) =>a //会返回a的值
注:只有当return存在一个时才使用。
如果一个函数只有一条执行语句,可以进行箭头函数的使用。
let malingshu = function (a){
chonsole.log(“nihao”)
}
转换箭头函数如下:
let malingshu = (a) => console.log("nihao");
【箭头函数优点】
1、比普通声明函数更简洁;
2、只有一个参数时,可以不用小括号;
3、只有一条执行语句的时候,可以不用大括号;
4、只有一条return时,可以不用写return;
5、不会把自己的this绑定到函数上;
【提升】
变量提升、函数提升
作用域(全局作用域、局部作用域)
1、全局作用域
2、函数作用域
3、eval作用域、
函数提升:只提升以字面量声明的函数
例:
JG445();
function pizza(){}
输出能显示下标
let arr=[2,3,4];
arr.sort();
arr.forEach(function(a,b){
console.log(a);
console.log(b);
}
)
函数作用域里的:
【预解析/预编译】(扩展)
1、创建AO对象
activation boject
1、声明变量(只取变量名)
2、形参(只取形参名)
AO{
a:
b:
c:
}
2、给AO对象赋值为undefined
AO{
a:undefined
b:undefined
c:undefined
}
3、把形参和实参统一
AO{
}
4、在函数体里找函数声明,并把它赋值给自己
只找以字面量形式声明的函数
函数提升只提升字面量
变量提升只提升var声明
这两个在一起,函数提升权重大于变量提升
global object(执行上下文)
GO{
i:undefined
}
let arr = [1,2,3,4.5]
基础版
进阶版
let arrNew = arr.reduce(
function (prev ,next){
//求最大值和最小值
returu prev < next ? prev : next;
8
if(prev>next){
return prev;
}else{
return next;
}
console.log(arrNew)
some() || 一真全真
every() || 一假全假 c