博客列表 >4.01模板字面量和标签函数

4.01模板字面量和标签函数

冰雪琉璃
冰雪琉璃原创
2021年04月19日 11:38:16500浏览

值传递

1.适用类型

  • 基本数据类型
    1.string,number,boolean,undefined, null.
  • 传参
  • 深拷贝
  1. 实例代码
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>值传递和引用传递</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. //赋值
    10. let a=1;
    11. let b=2;
    12. console.log("a=%d",b=%d",a,b");
    13. //更新a
    14. a=3;
    15. console.log("a=%d,b=%d",a,b);
    16. </script>
    17. </body>
    18. </html>

    引用传递

    1.适用类型
  • 引用数据类型
    1.Array, Function,object.
  • 浅拷贝
    2.实例代码
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>值传递和引用传递</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. let obj1={
    10. a:1,
    11. b:2,
    12. }
    13. console.log("obj1=%o",obj1);
    14. let obj2=obj1;
    15. console.log("obj2=%o",obj2);
    16. console.log(obj1===obj2);
    17. //更新obj1.
    18. //对象使用点来访问内部成员.
    19. obj1.a=4;
    20. console.log("obj1=%o",obj1);console.log("obj2=%o",obj2);
    21. </script>
    22. </body>
    23. </html>
    3.传参
    1.实例代码
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>值传递和引用传递</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. const f1=function(x){
    10. x=10;
    11. };
    12. let m=5;
    13. //m是入参
    14. f1(m);
    15. console.log("m=%o",m);//5
    16. //上述代码的简化.
    17. const f1=(x)=>(x=10);
    18. let m=5;
    19. f1(m);
    20. console.log("m=%o",m);
    21. const f2=(x)=>(x.a=10);
    22. let o={a:1,b:2};
    23. f2(o);
    24. console.log("0.a=",o.a);
    25. </script>
    26. </body>
    27. </html>
    2.模板字面量
    1.组成部分
    • 字符串字面量
    • 插值
    1. 实例代码
      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>模板字面量和标签函数</title>
      6. </head>
      7. <body>
      8. <script type="text/javascript">
      9. let name="赵老师";
      10. // let str="hello"+name;//hello 赵老师(传统方式)
      11. //运用${name}插值方式获取元素
      12. let str=`hello ${name}`;
      13. console.log(str)//hello 赵老师
      14. //模板字面量将表达式和插值嵌入到字符串
      15. let menus=['首页','导航','个人中心'];//menus[0],menus[1],menus[2]
      16. //字符串字面量
      17. let htmlStr=`
      18. <nav>
      19. <a href="">${menus[0]}</a>
      20. <a href="">${menus[1]}</a>
      21. <a href="">${menus[2]}</a>
      22. </nav>
      23. `;
      24. console.log(htmlStr);
      25. </script>
      26. </body>
      27. </html>
      3.标签函数
    2. 参数约定
    • 第一个参数:所有字符串字面量组成的数组
    • 第二个参数:插值组成的数组
      2.实例代码
      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>标签函数</title>
      6. </head>
      7. <body>
      8. <script type="text/javascript">
      9. // a,b代表插值,strs代表字符串字面量
      10. let sum=(strs,a,b)=>{
      11. console.log(strs);
      12. console.log(a,b);
      13. }
      14. let a=48;
      15. let b=12;
      16. sum `${a}+${b}=`;//60
      17. //归并参数
      18. let sum=(strs,...arr)=>{
      19. console.log(strs);
      20. console.log(arr);
      21. }
      22. let c=12;
      23. sum `${a}+${b}+${c}=`;//72
      24. </script>
      25. </body>
      26. </html>
      4.解构赋值
      • 对象解构
      • 参数解构
        1要求
      • 等号左边要求与等号右边一样.
        5.实例代码1
        1. <!DOCTYPE html>
        2. <html lang="en">
        3. <head>
        4. <meta charset="UTF-8">
        5. <title>数组解构</title>
        6. </head>
        7. <body>
        8. <script type="text/javascript">
        9. let [a,b,c]=[1,2,3];
        10. console.log(a,b,c);//123
        11. let [a,b]=[1,2,3]
        12. console.log(a,b,c)//c is undefined;
        13. [a,b]=[1,2,3]
        14. console.log(a,b)//1,2
        15. [a,b,c="js"]=[1,2]
        16. console.log(a,b,c)//1,2 js
        17. [a,b,...c]=[1,2,3,4,5,6,7,8];
        18. console.log(a,b,...c);//1,2,3,4,5,6,7,8
        19. [,,,a,,,,]=[1,2,3,4,5,6,7,8]
        20. console.log(a);//4
        21. </script>
        22. </body>
        23. </html>
        6.实例代码2
        1. <!DOCTYPE html>
        2. <html lang="en">
        3. <head>
        4. <meta charset="UTF-8">
        5. <title>传统的数字交换</title>
        6. </head>
        7. <body>
        8. <script type="text/javascript">
        9. //传统的数字交换
        10. let x=1;
        11. y=10;
        12. t;
        13. t=x;
        14. t=y;
        15. x=y;
        16. console.log(x,y)//x=10,y=1
        17. //简便方法是
        18. let a=10;b=1;
        19. [a,b]=[b,a]//a=1,b=10
        20. </script>
        21. </body>
        22. </html>
        7.对象解构
        1. <!DOCTYPE html>
        2. <html lang="en">
        3. <head>
        4. <meta charset="UTF-8">
        5. <title>对象解构</title>
        6. </head>
        7. <body>
        8. <script type="text/javascript">
        9. let item={
        10. id:10,
        11. name:"小红"
        12. };
        13. let id=item.id;
        14. let name=item.name;
        15. console.log(id,name);//id:10,name:小红
        16. //一致
        17. //{id,name}={id:10,name:"小红"}
        18. ({id,name}={id:10,name:"电脑"});
        19. console.log("id=%o,name=%o",id,name);//id:10,name:电脑
        20. </script>
        21. </body>
        22. </html>
        8.数组传参
        1. <!DOCTYPE html>
        2. <html lang="en">
        3. <head>
        4. <meta charset="UTF-8">
        5. <title>数组传参</title>
        6. </head>
        7. <body>
        8. <script type="text/javascript">
        9. let sum=([a,b])=>a+b;
        10. console.log(sum([1,2]));//3
        11. </script>
        12. </body>
        13. </html>
        9.对象传参
        1. <!DOCTYPE html>
        2. <html lang="en">
        3. <head>
        4. <meta charset="UTF-8">
        5. <title>对象传参</title>
        6. </head>
        7. <body>
        8. <script type="text/javascript">
        9. let getUser=({name,email})=>[name,email];
        10. console.log(getUser({name:"小红",email:"12@qq.X-UA-Compatible"}));
        11. </script>
        12. </body>
        13. </html>
        10.bind, apply,call介绍
        共同点:三种都可以改变this的指向。
        不同点:
        1. bind只绑定不执行。
          2.call,apply,绑定后立即执行,但参数不一样。
          3.call,参数是离散一个一个传入的。
          4.apply参数以数组得形式统一传入。
          实例演示:
          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <title>数组传参</title>
          6. </head>
          7. <body>
          8. <script type="text/javascript">
          9. function hello(name, name2){
          10. //this:执行上下文,程序运行环境。
          11. //this当前是全局window
          12. this.name=name;
          13. console.log(this)//window
          14. }
          15. hello("小明");
          16. //使用bind()改变函数中this的指向。
          17. const obj={
          18. name:"小李",
          19. };
          20. //bind()只绑定不执行
          21. let f=hello .bind(obj."admin");
          22. console.log(f())//undefined
          23. console.log(this)//name:admin
          24. //如果函数中的this被重新绑定之后,要求立即执行用apply, call.
          25. f=helo.call(obj,"小红");
          26. console.log(this)//name:小红
          27. hello.apply(obj,['小李','小红','小刘']);
          28. console.log(this)//name:小李,小红,小刘
          29. </script>
          30. </body>
          31. </html>
  1. 访问器属性
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>访问器属性</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. //对象成员:属性,方法
    10. //属性:类似于变量
    11. //方法:类似于函数
    12. const product={
    13. data:[
    14. {id:1,name:"电脑",price:20000, num:1},
    15. {id:2,name:"手机",price:10000, num:1},
    16. {id:3,name:"idpan",price:20000, num:1},
    17. {id:4,name:"电视机",price:20000, num:1},
    18. ],
    19. //计算总金额
    20. //方法
    21. getAmountsfunction(){
    22. return this.data.reduce((t,c)=>(t+=c.price*c.num),0);
    23. },
    24. };
    25. console.log("总金额=",product.getAmounts());
    26. //将一个方法包装成一个属性,get是访问器属性的读操作
    27. get total(){
    28. return this.data.reduce((t,c)=>(t+=c.price*c.num),0)
    29. }
    30. //set 是访问器属性的写操作,
    31. set serPrice(price){
    32. this.data[1].price=price;
    33. };
    34. product.serPrice=8000;
    35. console.log(product.data[1].price);//将改变product第一个产品的价格
    36. //用属性的方式来获取总金额
    37. console.log("总金额=",product.total);
    38. </script>
    39. </body>
    40. </html>
  2. 访问器属性的优先级
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>访问器属性的优先级</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. let user={
    10. data:{name},
    11. get name(){
    12. return this.data.name;
    13. },
    14. set name(v){
    15. this .data.name=v;
    16. },
    17. };
    18. //访问器属性的优先级高于同名的普通属性。
    19. user.name="小六";
    20. console.log(user.name);//name:小六
    21. </script>
    22. </body>
    23. </html>
    3.作用域和闭包
    作用域的分类
    1.函数作用域
    2.块作用域
    3.全局作用域
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>数组传参</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. //全局作用域对象是window
    10. console.log(this)//window
    11. //函数作用域
    12. let site="我是全局变量"
    13. function getSize(){
    14. //site是声明在函数外部的全局变量
    15. //在函数内部可以访问外部的变量,但是函数外部的不能访问内部的变量。
    16. return size;
    17. }
    18. console.log(getSize());//我是全局变量
    19. //块作用域
    20. //用于if,while语句中
    21. if(条件){
    22. //满足条件的语句
    23. };
    24. while(条件){
    25. //满足条件的语句
    26. }
    27. </script>
    28. </body>
    29. </html>
  • 总结:函数作用域是一个查询的过程,先在自身查找要输出的变量,如果没有则一级一级往上查找,一直没有则返回undefined;它的查找过程构成了作用域链。var声明的变量不支持块作用域。
  1. 闭包
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>访问器属性</title>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. let c=100;
    10. function sum(a,b){
    11. return a+b+c;
    12. }
    13. console.log(sum(4,5));109
    14. //上述产生了闭包
    15. //通过sum()函数之外的c变量可以产生闭包
    16. //c属于自由变量
    17. </script>
    18. </body>
    19. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议