博客列表 >函数参数与返回值、模板字面量与模板函数、闭包

函数参数与返回值、模板字面量与模板函数、闭包

OC的PHP大牛之路
OC的PHP大牛之路原创
2022年07月22日 15:42:36358浏览

函数参数与返回值

  1. // function hello(参数){
  2. // return 返回值
  3. // }
  4. function hello(username){
  5. return 'hello,'+username;
  6. }
  7. console.log(hello('大家好'));

1.参数不足:给个默认值

  1. function hello(username='admin'){
  2. return 'hello,'+username;
  3. }
  4. console.log(hello());

2.参数过多:...(rest只是标识符)

  1. function hello(...users){
  2. return users;
  3. }
  4. console.log(hello('同学们','大家好','开始上课'));

注:(…)用在函数参数中它的功能是压入到数组中;(…)用在函数调用时它的功能是展开数组;

3.返回值(默认是单值)
当业务需要返回多个值,需将多个值包装到一个容器中(容器:数组、对象)
3.1数组

  1. // 数组
  2. const f=()=>[1,2,3];
  3. console.log(f());

3.2对象
如果只返回一个对象字面量,必须将返回的对象转为表达式(加个圆括号({}))再返回

  1. f=()=>({
  2. a:1,
  3. b:2,
  4. get:function(){
  5. return'ok';
  6. },
  7. });
  8. console.log(f());

对象字面量的简化方案

  1. let name='朱老师';
  2. console.log(name);
  3. let user={
  4. // name:'朱老师',
  5. }
  6. console.log(user.name);

当与对象(user)处在同一作用域内并存在一个同名的变量(name),

且对象(user)内有一个属性和同一作用域内的变量同名,就可以使用简化方案;

  1. let name='马老师';
  2. let email='a@qq.com';
  3. let user={
  4. name,
  5. email,
  6. // getuserinfo:function(){
  7. // return this.name+':'+this.email;
  8. // },
  9. // 方法简写:将“:function”删掉即可
  10. getuserinfo(){
  11. return this.name+':'+this.email;
  12. },
  13. }
  14. console.log(user.name);
  15. console.log(user.email);
  16. console.log(user.getuserinfo());

注:箭头函数不要使用在对象字面量中;

模板字面量与模板函数

1.模板字面量

  1. console.log('hello 朱老师');
  2. // 'hello 朱老师':字符串
  3. // 'hello username':模板字符串,username>占位符/插值/表达式
  4. let username='朱老师';
  5. // 'hello'插值之外的字符串叫字面量
  6. console.log('hello'+username);
  7. // 模板字符串,用的是反引号(``)
  8. console.log(`hello ${username}`);
  9. // 10+40:插值表达式
  10. console.log(`10+40= ${10+40}`);
  11. // ${age>=18?`成年` :`未成年`}:三元表达式
  12. let age=10;
  13. console.log(`${age>=18?`成年` :`未成年`}`);

2.模板函数/标签函数(用“模板字面量”作为参数的函数)

  1. // alert:函数名;`hello php.cn`:函数参数,不需要括号
  2. alert`hello php.cn`;
  3. // 注:模板函数声明和普通函数一样,只不过在调用时使用“模板字面量”作为参数
  4. // function total(参数1,参数2)
  5. // 参数1:必须是当前模板字面量参数中的字符串字面量组成的数组
  6. // 参数2:必须是一个或多个模板字面量中的插值列表
  7. function total(strings,...args){
  8. console.log(strings);
  9. console.log(args);
  10. }
  11. let name='手机';
  12. let num=10;
  13. let price=500;
  14. total`名称:${name},数量:${num},单价:${price}`;

闭包

  1. // d:自由变量(函数外部的变量)
  2. let d=40;
  3. // a,b:参数变量
  4. let fn=function(a,b){
  5. // c:私有变量/内部变量/局部变量
  6. let c=30;
  7. return a+b+c+d;
  8. };
  9. console.log(fn(10,20));

函数内部可用的三种变量:
1.参数变量:函数参数列表中shengm
2.私有变量:函数内部声明
3.自由变量:函数外部声明

形成闭包的二个条件:
1.父子函数
2.子函数中调用父函数中的变量

  1. // fn:父函数
  2. // f:子函数
  3. // a:父函数中的参数变量
  4. // b:子函数中的参数变量
  5. fn=function(a){
  6. let f=function(b){
  7. return a+b;
  8. };
  9. return f;
  10. };
  11. let f1=fn(10);
  12. console.log(f1(20));

闭包应用

1.偏函数(高阶函数)

  1. fn=function(a,b,c){
  2. return a+b+c;
  3. };
  4. console.log(fn(1,2,3));

使用闭包,可以将函数调用时的多个参数打散以此传入(柯里化)

  1. fn=function(a){
  2. return function(b){
  3. return function(c){
  4. return a+b+c;
  5. };
  6. };
  7. };
  8. console.log(fn(10)(20)(30));
  9. // 使用箭头函数简化:
  10. fn=a=>b=>c=>a+b+c;
  11. console.log(fn(10)(20)(30));

2.纯函数(不会用到自由变量)

  1. // let dis=0.5;
  2. function getprice(price){
  3. return price*dis;
  4. };

纯函数

  1. let dis=0.5;
  2. function getprice(price,dis){
  3. return price*dis;
  4. };
  5. console.log(getprice(100,dis));
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议