欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模板字面量和闭包函数

程序员文章站 2022-05-01 21:54:43
...
  1. // y 模板字面量 与模板函数
  2. // !模板字面量
  3. // 传统
  4. console.log("hello world");
  5. // 模板自变量
  6. console.log(`hello world`);
  7. // 模板字面量中,可以使用插值(变量、表达式),可以解析变量
  8. let name = "朱老师";
  9. console.log("Hello" + name);
  10. // 变量 / 表达式等插值, 使用$ {……}
  11. // 插入到模板字面量中
  12. console.log(`Hello ${name}`);
  13. console.log(`10+20= ${10 + 20}`);
  14. console.log(`${80 > 20 ? `大于` : `小于`}`);
  15. // 模板函数
  16. // 使用模板字面量为参数的函数
  17. // 模板函数:第一个参数是字面量组成的数组,第二个参数起,是字面量里中的插值列表
  18. // y 声明模板函数
  19. function total(string, num, price) {
  20. console.log(string);
  21. console.log(num, price);
  22. // console.log(price);
  23. let res = `${string[0]}${string[1]}${string[2]}${num * price}`;
  24. console.log(res);
  25. }
  26. let num = 10;
  27. let price = 20;
  28. // total`${num}*${price}总金额:${num * price}元`;
  29. total`数量:${num} 单价:${price}`;
  30. // 模板函数的优化,以后只用这一种
  31. // 使用...rest将插值合并
  32. function sum(strings, ...args) {
  33. console.log(strings);
  34. console.log(args);
  35. console.log(`[${args.join()}]之和是:${args.reduce((a, c) => a + c)}`);
  36. }
  37. // 调用
  38. sum`计算多个数和:${1}${2}${3}${4}`;
  39. // 总结:
  40. // 模板字面量:是可以使用插值表达式的语法
  41. // 模板函数:可以使用“模板字面量”为参数的函数
  42. // 模板函数,就是在模板字面量之前加一个标签或标识符,而这个标签,就是一个函数名
  43. // 模板函数的参数是有约定的,第一个是字面量数组,从第二个起才是内部的占位符参数
  44. ```javascript
  45. // to闭包
  46. // y *变量
  47. let x = 90;
  48. let fn = function(a, b) {
  49. // 函数内部的变量
  50. // 1.参数变量 a,b
  51. // 2.内部变量 c
  52. // abc都是私有变量
  53. let c = 3;
  54. return a + b + c + x;
  55. // x声明在函数外部,称为*变量
  56. };
  57. console.log(fn(1, 2));
  58. // 闭包
  59. // 1.父子函数
  60. // 2.子函数调用父函数中的变量
  61. fn = function(a) {
  62. let f = function(b) {
  63. return a + b;
  64. };
  65. return f;
  66. };
  67. let f = fn(30);
  68. console.log(typeof f);
  69. console.log(f(20));
  70. // 偏函数
  71. // 当一个函数需要多个参数的时候,不一定一次性全部传入,可以分批传入
  72. fn = function(a, b) {
  73. return function(c) {
  74. return a + b + c;
  75. };
  76. };
  77. f = fn(1, 2);
  78. console.log(fn(1, 2, 3));
  79. console.log(f(12));
  80. fn = function(a) {
  81. return function(b) {
  82. return function(c) {
  83. return a + b + c;
  84. };
  85. };
  86. };
  87. // 将参数逐个传入,叫柯里化函数
  88. console.log(fn(2)(3)(4));
  89. // 改为箭头函数
  90. fn1 = a => b => c => a + b + c;
  91. console.log(fn1(1)(2)(4));
  92. // 反闭包函数:纯函数
  93. // 纯函数: 函数中用到的变量全是自己的,没有“*变量”
  94. // 如果函数内部必须用到外部变量,必须通过参数传入
  95. let discount = 0.8;
  96. function getPrice(price, discount = 1) {
  97. return price * discount;
  98. }
  99. console.log(getPrice(12000, discount));
  100. // 关于对象变量的访问
  101. // todo 访问器属性
  102. let user1 = {
  103. data: { name: "teddy", age: 20 },
  104. getage() {
  105. return user1.data.age;
  106. },
  107. setage(age) {
  108. user1.data.age = age;
  109. },
  110. };
  111. // console.log(user1.data.name, user1.data.age);
  112. console.log(user1.getage());
  113. user1.setage(40);
  114. console.log(user1.getage());

```