函数
函数的参数类型与返回值
函数的参数
function hello(c){
return c;
};
在上方的代码中c就是函数的参数,return c 就是函数的返回值
函数的参数不是一成不变的,会出现各种各样的情况
1.参数不足:在声明函数和输出是都没有赋予参数具体的值,这种情况下可以给参数一个默认值function hello(c='默认值'){
return c;
};
2.参数过多:在输出是给了一个参数很多个值function hello(c='默认值'){
return c;
};
console .log(hello(1,2,3,4));
这样的情况可以使用 … 将多个参数压缩成一个数组,然后输出function hello(...c){
return c;
};
console .log(hello(1,2,3,4));
… 这个语法在函数声明时可以将参数压缩成数组然后输出,在函数调用时可以将数组展开const a =['老师','学生','校长'];
console.log(...a);
函数的返回值
函数的返回值默认是单值返回,但是实际的业务中有时会要求多值返回,这是后就需要将多个返回的值包装在一个容器中返回
一共有两个容器,分别是数组和对象
数组
let f =()=>[1,2,3,4,5,6];
console.log(f());
对象
h=()=>{
a:1;
b:2;
};
console.log(h());
模板字面量和模板函数
模板字面量
在一个字符串中,出现占位符,则这个字符串为模板字符串
占位符:占位符可以是变量,插值,表达式
let username ='朱老师';
// 声明模板字符串 用反引号 在esc键下面
// 占位符用${} 包围
console.log (`hallo ${username}`);
// 10+40=50 其中50 用${10+40}表示,会计算出结果 这就叫插值
console.log(`10+40=${10+40}`);
// 在其中加入判断表达式
// 在字面量中写入判断表达式,则可以输出结果
let a =20;
console.log(`${a>18?`成年`:`未成年`}`);
模板函数
使用模板字面量作为参数的函数,叫做模板函数
模板函数的声明和普通函数一样,但是调用时要用模板字符串作为参数
在模板函数中必须要有两个参数
1.第一个参数是用来存储当前模板字面量中的字符串组成的数组
2.第二个参数是用来存储模板字面量中的插值列表
例如 function a (参数1,参数2){};
function a (str,...ar){
console.log(str,ar);
}
let name='手机';
let num=20;
let price=55;
a`名称:${name},数量:${num},单价:${price},`
代码解释 首先声明一个函数 a 是一个模板函数 里面有参数一 str(存储字符串) ar(存储字符串中的插值) …是多个参数压缩成数组
然后声明三个变量 最后调用模板函数a 将这三个变量作为插值,等待函数调用
闭包
闭包的形成条件
首先在一个函数中有三种不同的变量
let d = 40;
let fn = function(a,b){
// a,b是参数变量
// 下面的c是私有变量,只能在函数内部访问
let c =30;
// d 是函数外部变量:也叫自由变量
return a + b+c+d;
};
接下来就是闭包的形成条件
1.必须是一个父子函数
2.在子函数中调用了父函数中的参数,
达到以上两个条件,闭包形成
闭包的访问方法
h = function(a){
let d= function(f){
// a是父函数中的参数,b是子函数中的参数
return a*f;
}
// 在父函数中返回这个子函数
return d;
}
console.log(h(20)(10));
fn = function(a){
// 第一级函数 可以调用参数a
return function(b){
// 第二级函数 可以调用参数a,b
return function(c,d){
// 第三级函数,可以调用参数a,b,c
return a+b+c+d;
}
}
}
// 传入参数的方法
// 使用闭包的时候,可以将函数参数调用时 的多个参数分开传入
console.log(fn(10)(20)(30,40));
// 上面的fn 代表一级父函数 每一个括号表示每一级函数的参数
// 如果某一级函数有多个参数,就和正常的一样 用逗号隔开
// 简化上面的函数
fn=a=>b=>(c,d)=>a+b+c+d;
console.log(fn(20)(20)(30,40));
纯函数
当一个函数不需要调用外部变量的时候,这个函数就叫纯函数了
let dis= 0.75;
function a(d){
return d*dis;
}
console.log(a(50));
上面这个函数就不是一个纯函数,因为他调用了函数外的变量dis
如果要将他变成一个纯函数,只需要将这个外部变量,通过参数的方式传入函数中就行
let dis= 0.75;
function a(d,dis){
return d*dis;
}
// 将外部的参数直接转成函数的自带参数 然后调用
// 调用是直接输入参数名 不用给值
console.log(a(50,dis));