Blogger Information
Blog 34
fans 0
comment 0
visits 20152
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
函数参数与返回值、模板字面量与模板函数、闭包
OC的PHP大牛之路
Original
364 people have browsed it

函数参数与返回值

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