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

```

更多相关文章

  1. 自定义视图中使用自定义变量
  2. Android(安卓)Studio环境变量设置
  3. Android(安卓)Build System详解
  4. gps架构分析
  5. Android(安卓)UI学习 - Tab的学习和使用
  6. sql字符串函数大全和使用方法示例
  7. SqlServer中用exec处理sql字符串中含有变量的小例子
  8. mssql函数DATENAME使用示例讲解(取得当前年月日/一年中第几天SQL
  9. SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)使用方法

随机推荐

  1. vue学习系列-认识vue.js
  2. 在AppCode中的razor调用HtmlHelper方法和
  3. html5炸金花棋牌开发
  4. HTML5中Canvas与SVG的画图原理比较
  5. 详解 转发 https://www.cnblogs.com/figh
  6. 如何使用“left:100%”CSS规则保留DIV宽度
  7. 嵌入的图像在签名中不显示。
  8. 急!!!在eclipse中,如何对某个html不做验证
  9. 百度一下就知道
  10. 关于使用js/jquery监听input框输入的银行