JavaScript提高班之ES6(七)

4.3、在chrome中调试闭包


  1. 打开浏览器,按 F12 键启动 chrome 调试工具。

  2. 设置断点。

  3. 找到 Scope 选项(Scope 作用域的意思)。

  4. 当我们重新刷新页面,会进入断点调试,Scope 里面会有两个参数(global 全局作用域、local 局部作用域)。

  5. 当执行到 fn2() 时,Scope 里面会多一个 Closure 参数 ,这就表明产生了闭包。

在这里插入图片描述

4.4、闭包的作用


  • 延伸变量的作用范围

4.5、闭包练习


4.5.1、点击li输出索引号

  • 榴莲
  • 臭豆腐
  • 鲱鱼罐头
  • 大猪蹄子
  • 在这里插入图片描述

    4.5.2、定时器中的闭包

  • 榴莲
  • 臭豆腐
  • 鲱鱼罐头
  • 大猪蹄子
  • 在这里插入图片描述

    5、递归

    ======================================================================

    如果一个函数在内部可以调用其本身,那么这个函数就是递归函数

    简单理解: 函数内部自己调用自己,这个函数就是递归函数

    由于递归很容易发生"栈溢出"错误,所以必须要加退出条件 return

    6、浅拷贝和深拷贝

    ===========================================================================

    1. 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用

    2. 深拷贝拷贝多层,每一级别的数据都会拷贝

    3. Object.assign(target,....sources) ES6新增方法可以浅拷贝

    6.1、浅拷贝


    // 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用

    var obj = {

    id: 1,

    name: ‘andy’,

    msg: {

    age: 18

    }

    };

    var o = {}

    for(var k in obj){

    // k是属性名,obj[k]是属性值

    o[k] = obj.[k];

    }

    console.log(o);

    // 浅拷贝语法糖

    Object.assign(o,obj);

    6.2、深拷贝


    // 深拷贝拷贝多层,每一级别的数据都会拷贝

    var obj = {

    id: 1,

    name: ‘andy’,

    msg: {

    age: 18

    }

    color: [‘pink’,‘red’]

    };

    var o = {};

    // 封装函数

    function deepCopy(newobj,oldobj){

    for(var k in oldobj){

    // 判断属性值属于简单数据类型还是复杂数据类型

    // 1.获取属性值 oldobj[k]

    var item = obldobj[k];

    // 2.判断这个值是否是数组

    if(item instanceof Array){

    newobj[k] = [];

    deepCopy(newobj[k],item)

    }else if (item instanceof Object){

    // 3.判断这个值是否是对象

    newobj[k] = {};

    deepCopy(newobj[k],item)

    }else {

    // 4.属于简单数据类型

    newobj[k] = item;

    }

    }

    }

    deepCopy(o,obj);

    7、 正则表达式

    ==========================================================================

    正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。

    正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。

    7.1、特点


    • 实际开发,一般都是直接复制写好的正则表达式

    • 但是要求会使用正则表达式并且根据自身实际情况修改正则表达式

    7.2、创建正则表达式


    在JavaScript中,可以通过两种方式创建正则表达式

    1. 通过调用 RegExp 对象的构造函数创建

    2. 通过字面量创建

    7.2.1、通过调用 RegExp 对象的构造函数创建

    通过调用 RegExp 对象的构造函数创建

    var 变量名 = new RegExp(/表达式/);

    7.2.2、通过字面量创建

    通过字面量创建

    var 变量名 = /表达式/;

    注释中间放表达式就是正则字面量

    7.2.3、测试正则表达式 test

    • test()正则对象方法,用于检测字符串是否符合该规则,该对象会返回truefalse,其参数是测试字符串

    regexObj.test(str)

    • regexObj 写的是正则表达式

    • str 我们要测试的文本

    • 就是检测str文本是否符合我们写的正则表达式规范

    示例

    7.3、正则表达式中的特殊在字符


    7.3.1、边界符

    正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

    | 边界符 | 说明 |

    | — | — |

    | ^ | 表示匹配行首的文本(以谁开始) |

    | $ | 表示匹配行尾的文本(以谁结束) |

    如果^ 和 $ 在一起,表示必须是精确匹配

    // 边界符 ^ $

    var rg = /abc/; //正则表达式里面不需要加引号,不管是数字型还是字符串型

    // /abc/只要包含有abc这个字符串返回的都是true

    console.log(rg.test(‘abc’));

    console.log(rg.test(‘abcd’));

    console.log(rg.test(‘aabcd’));

    var reg = /^abc/;

    console.log(reg.test(‘abc’)); //true

    console.log(reg.test(‘abcd’)); // true

    console.log(reg.test(‘aabcd’)); // false

    var reg1 = /^abc$/

    // 以abc开头,以abc结尾,必须是abc

    7.3.2、字符类

    • 字符类表示有一系列字符可供选择,只要匹配其中一个就可以了

    • 所有可供选择的字符都放在方括号内

    ①[] 方括号

    /[abc]/.test(‘andy’); // true

    后面的字符串只要包含 abc 中任意一个字符,都返回true

    ②[-]方括号内部 范围符

    /1$/.test()

    方括号内部加上 - 表示范围,这里表示 a - z 26个英文字母都可以

    ③[^] 方括号内部 取反符 ^

    /[^abc]/.test(‘andy’) // false

    方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false

    注意和边界符 ^ 区别,边界符写到方括号外面

    ④字符组合

    /[a-z1-9]/.test(‘andy’) // true

    方括号内部可以使用字符组合,这里表示包含 a 到 z的26个英文字母和1到9的数字都可以

    7.3.3、量词符

    量词符用来设定某个模式出现的次数

    | 量词 | 说明 |

    | — | — |

    | * | 重复零次或更多次 |

    | + | 重复一次或更多次 |

    | ? | 重复零次或一次 |

    | {n} | 重复n次 |

    | {n,} | 重复n次或更多次 |

    | {n,m} | 重复n到m次 |

    7.3.4、用户名验证

    功能需求:

    1. 如果用户名输入合法, 则后面提示信息为 : 用户名合法,并且颜色为绿色

    2. 如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为绿色

    分析:

    1. 用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为 6~16位.

    2. 首先准备好这种正则表达式模式 /$[a-zA-Z0-9-_]{6,16}^/

    3. 当表单失去焦点就开始验证.

    4. 如果符合正则规范, 则让后面的span标签添加 right 类.

    5. 如果不符合正则规范, 则让后面的span标签添加 wrong 类.

    请输入用户名

    7.4、括号总结


    1. 大括号 量词符 里面面表示重复次数

    2. 中括号 字符集合 匹配方括号中的任意字符

    3. 小括号 表示优先级

    // 中括号 字符集合 匹配方括号中的任意字符

    var reg = /2$/;

    // a || b || c

    // 大括号 量词符 里面表示重复次数

    var reg = /^abc{3}$/; // 它只是让c 重复3次 abccc

    // 小括号 表示优先级

    var reg = /^(abc){3}$/; //它是让 abc 重复3次

    在线测试正则表达式:https://c.runoob.com/

    7.5、预定义类


    预定义类指的是 某些常见模式的简写写法

    | 预定类 | 说明 |

    | — | — |

    | \d | 匹配0-9之间的任一数字,相当于[0-9] |

    | \D | 匹配所有0-9以外的字符,相当于[ ^ 0-9] |

    | \w | 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_ ] |

    | \W | 除所有字母、数字、和下划线以外的字符,相当于[ ^A-Za-z0-9_ ] |

    | \s | 匹配空格(包括换行符,制表符,空格符等),相当于[\t\t\n\v\f] |

    | \S | 匹配非空格的字符,相当于[ ^ \t\r\n\v\f] |

    7.5.1、表单验证

    分析:

    1.手机号码: /^1[3|4|5|7|8][0-9]{9}$/

    2.QQ: [1-9][0-9]{4,} (腾讯QQ号从10000开始)

    3.昵称是中文: ^[\u4e00-\u9fa5]{2,8}$

    最后

    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

    因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    img

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

    如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    预定义类指的是 某些常见模式的简写写法

    | 预定类 | 说明 |

    | — | — |

    | \d | 匹配0-9之间的任一数字,相当于[0-9] |

    | \D | 匹配所有0-9以外的字符,相当于[ ^ 0-9] |

    | \w | 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_ ] |

    | \W | 除所有字母、数字、和下划线以外的字符,相当于[ ^A-Za-z0-9_ ] |

    | \s | 匹配空格(包括换行符,制表符,空格符等),相当于[\t\t\n\v\f] |

    | \S | 匹配非空格的字符,相当于[ ^ \t\r\n\v\f] |

    7.5.1、表单验证

    分析:

    1.手机号码: /^1[3|4|5|7|8][0-9]{9}$/

    2.QQ: [1-9][0-9]{4,} (腾讯QQ号从10000开始)

    3.昵称是中文: ^[\u4e00-\u9fa5]{2,8}$

    最后

    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

    因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    [外链图片转存中…(img-Qklx7P5a-1714915701257)]

    [外链图片转存中…(img-EUwkCGwP-1714915701257)]

    [外链图片转存中…(img-Jxg4Ywb2-1714915701258)]

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

    如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!


    1. a-z ↩︎

    2. abc ↩︎

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值