Blogger Information
Blog 29
fans 1
comment 0
visits 14842
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js中的函数与闭包
风车
Original
317 people have browsed it

函数

函数的参数类型与返回值

函数的参数

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());

对象
  1. h=()=>{
  2. a:1;
  3. b:2;
  4. };
  5. console.log(h());

模板字面量和模板函数

模板字面量

在一个字符串中,出现占位符,则这个字符串为模板字符串
占位符:占位符可以是变量,插值,表达式

  1. let username ='朱老师';
  2. // 声明模板字符串 用反引号 在esc键下面
  3. // 占位符用${} 包围
  4. console.log (`hallo ${username}`);
  5. // 10+40=50 其中50 用${10+40}表示,会计算出结果 这就叫插值
  6. console.log(`10+40=${10+40}`);
  7. // 在其中加入判断表达式
  8. // 在字面量中写入判断表达式,则可以输出结果
  9. let a =20;
  10. console.log(`${a>18?`成年`:`未成年`}`);
模板函数

使用模板字面量作为参数的函数,叫做模板函数
模板函数的声明和普通函数一样,但是调用时要用模板字符串作为参数
在模板函数中必须要有两个参数
1.第一个参数是用来存储当前模板字面量中的字符串组成的数组
2.第二个参数是用来存储模板字面量中的插值列表
例如 function a (参数1,参数2){};

  1. function a (str,...ar){
  2. console.log(str,ar);
  3. }
  4. let name='手机';
  5. let num=20;
  6. let price=55;
  7. a`名称:${name},数量:${num},单价:${price},`

代码解释 首先声明一个函数 a 是一个模板函数 里面有参数一 str(存储字符串) ar(存储字符串中的插值) …是多个参数压缩成数组

然后声明三个变量 最后调用模板函数a 将这三个变量作为插值,等待函数调用

闭包

闭包的形成条件

首先在一个函数中有三种不同的变量

  1. let d = 40;
  2. let fn = function(a,b){
  3. // a,b是参数变量
  4. // 下面的c是私有变量,只能在函数内部访问
  5. let c =30;
  6. // d 是函数外部变量:也叫自由变量
  7. return a + b+c+d;
  8. };

接下来就是闭包的形成条件
1.必须是一个父子函数
2.在子函数中调用了父函数中的参数,
达到以上两个条件,闭包形成

闭包的访问方法

  1. h = function(a){
  2. let d= function(f){
  3. // a是父函数中的参数,b是子函数中的参数
  4. return a*f;
  5. }
  6. // 在父函数中返回这个子函数
  7. return d;
  8. }
  9. console.log(h(20)(10));
  1. fn = function(a){
  2. // 第一级函数 可以调用参数a
  3. return function(b){
  4. // 第二级函数 可以调用参数a,b
  5. return function(c,d){
  6. // 第三级函数,可以调用参数a,b,c
  7. return a+b+c+d;
  8. }
  9. }
  10. }
  11. // 传入参数的方法
  12. // 使用闭包的时候,可以将函数参数调用时 的多个参数分开传入
  13. console.log(fn(10)(20)(30,40));
  14. // 上面的fn 代表一级父函数 每一个括号表示每一级函数的参数
  15. // 如果某一级函数有多个参数,就和正常的一样 用逗号隔开
  16. // 简化上面的函数
  17. fn=a=>b=>(c,d)=>a+b+c+d;
  18. console.log(fn(20)(20)(30,40));

纯函数

当一个函数不需要调用外部变量的时候,这个函数就叫纯函数了

  1. let dis= 0.75;
  2. function a(d){
  3. return d*dis;
  4. }
  5. console.log(a(50));

上面这个函数就不是一个纯函数,因为他调用了函数外的变量dis

如果要将他变成一个纯函数,只需要将这个外部变量,通过参数的方式传入函数中就行

  1. let dis= 0.75;
  2. function a(d,dis){
  3. return d*dis;
  4. }
  5. // 将外部的参数直接转成函数的自带参数 然后调用
  6. // 调用是直接输入参数名 不用给值
  7. console.log(a(50,dis));
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post