博客列表 >JavaScript函数的参数与返回值/模板字符串/闭包

JavaScript函数的参数与返回值/模板字符串/闭包

Pharaoh
Pharaoh原创
2022年07月22日 15:01:26655浏览

函数的参数与返回值

  • 函数的返回值默认是单值return 字符串/变量/表达式;
  • 如果需要返回多个值可以返回一个数组
    • 使用…rest参数将多个参数压入一个数组返回
      1. function webShell(...shell) {
      2. return shell;
      3. }
  • …rest参数在调用函数时,是将数组(容器)展开
    1. let hack = ["or", "=", "or"];
    2. console.log(webShell(...hack));
  • 返回对象字面量,必须将对象字面量用()包裹起来当作一个表达式
    1. obj = () => ({
    2. a: 1,
    3. b: 2,
    4. c: function () {
    5. return null;
    6. },
    7. });

实例

  1. // 参数
  2. function web(website) {
  3. return website;
  4. }
  5. // 返回值默认是单值:return website;
  6. console.log(web("https://www.xxx.com"));
  7. // 使用...rest返回多个返回值(数组,对象)
  8. function webShell(...shell) {
  9. return shell;
  10. }
  11. let hack = ["or", "=", "or"];
  12. // ...rest使用在调用函数时,会展开容器["or", "=", "or"] === "or" , "=" , "or"
  13. console.log(webShell(...hack));
  14. obj = () => ({
  15. a: 1,
  16. b: 2,
  17. c: function () {
  18. return null;
  19. },
  20. });
  21. console.log(obj());

模板字符串(模板字面量)

  • 用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中插入变量/表达式

  • 插值:使用占位符${变量/表达式}将动态值放入创建的字符串中

实例

  1. let num = 8;
  2. let insertValue = `我是模板字符串,${num}我也是模板字符串,${
  3. 8 * 8}`;
  4. let doubleLine = `
  5. 我是第一行
  6. 我是第二行
  7. `;
  8. console.log(insertValue);
  9. console.log(doubleLine);

标签(标签函数)

  • 模板函数/标签 :是将模板字面量作为实参,传给一个函数

  • 标签函数的第一个参数是一个数组,里面是没有${}占位符所替换的部分,也就是模板字符串中的所有字面量,就是说这里形参接收的是模板字符串中除去${}之外的字符串所组成的数组,每一个${}都相当于一个分隔符

  • 第二个是剩余参数,包含了所有${}占位符中的计算结果,而想要接收${}所表示的字符串,需要额外的形参,有几个${}就需要多几个形参,或者使用rest参数来把剩余的参数接收为一个数组,形式为:函数 (形参1 ,...形参2)

实例

  1. function f(a) {
  2. console.log(a);
  3. }
  4. f`我会被传递给第一个形参,${"我不会被第一个形参传递"},8也会`;
  5. let str1 = "我被形参b接收";
  6. let str2 = "我被形参c接收";
  7. function tag(a, b, c) {
  8. console.log(a);
  9. console.log(b);
  10. console.log(c);
  11. }
  12. tag`我被第一个形参传递,${str1},我也被第一个形参传递,${str2}`;
  13. // 函数常规调用
  14. tag(1, 2, 3);

闭包

  • 子函数使用父函数变量的行为就是闭包
  • 闭包可以延长被调用父函数变量的声明周期,不会很快被回收

实例

  1. function fun(a) {
  2. function fun2(b) {
  3. return a + b;
  4. }
  5. // 函数加了括号就是调用,所以不能加括号
  6. // return fun2();
  7. return fun2;
  8. }
  9. console.log(fun(2)(3));

简单来说,闭包就是在一个函数当中再嵌套一个函数,内层函数可以访问外层函数中声明和定义的变量,而外层函数却不能访问内层函数中声明和定义的变量,内层函数向对于外层函数来说是封闭的,所以当在一个函数中还定义了一个函数,内层函数是一个闭包

拓展:对象字面量的简化

某个变量的变量名和对象某个属性同名,且在一个作用域,可以给对象字面量简化

实例

  1. let arr = {
  2. name: "pharaoh",
  3. age: 30,
  4. height: 172,
  5. sum: function () {
  6. return this.age + this.height;
  7. },
  8. };
  9. console.log(arr.sum());
  10. // 简化
  11. let name = "Pharaoh";
  12. let age = 30;
  13. let height = 172;
  14. let arr2 = {
  15. name,
  16. age,
  17. height,
  18. // 方法简写:去掉冒号和function (: function)
  19. sum() {
  20. return this.age + this.height;
  21. },
  22. sum1: () => arr2.age + arr2.height,
  23. // 不要再箭头函数中使用this
  24. // this在普通函数中,调用时确定
  25. // this在箭头函数中,声明时确定
  26. // sum1: () => this.age + this.height,
  27. };
  28. console.log(arr2.sum());
  29. console.log(arr2.sum1());

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议