JavaScript提高班之ES6(七)(2)

因为"use strict"加了引号,所以老版本的浏览器会把它当作一行普通字符串而忽略。

有的 script 基本是严格模式,有的 script 脚本是正常模式,这样不利于文件合并,所以可以将整个脚本文件放在一个立即执行的匿名函数之中。这样独立创建一个作用域而不影响其他 script 脚本文件。

1.1.2、为函数开启严格模式

  • 若要给某个函数开启严格模式,需要把"use strict"'use strict'声明放在函数体所有语句之前
  • "use strict" 放在函数体的第一行,则整个函数以 "严格模式"运行。

2、严格模式中的变化

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

  • 严格模式对JavaScript的语法和行为,都做了一些改变

2.1、变量规定


  • 在正常模式中,如果一个变量没有声明就赋值,默认是全局变量

  • 严格模式禁止这种用法,变量都必须先用var 命令声明,然后再使用

  • 严禁删除已经声明变量,例如,``delete x` 语法是错误的

2.2、严格模式下this指向问题


  1. 以前在全局作用域函数中的this指向window对象

  2. 严格模式下全局作用域中函数中的this 是 undefined

  3. 以前构造函数时不加 new 也可以调用,当普通函数,this指向全局对象

  4. 严格模式下,如果构造函数不加 new 调用,this指向的是 undefined ,如果给它赋值,会报错

  5. new 实例化的构造函数指向创建的对象实例

  6. 定时器this 还是指向window

  7. 事件、对象还是指向调用者

2.3、函数变化


  1. 函数不能有重名的参数

  2. 函数必须声明在顶层,新版本的JavaScript会引入“块级作用域”(ES6中已引入)。为了与新版本接轨,不允许在非函数的代码块内声明函数

3、高阶函数

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

  • 高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出

接收函数作为参数

将函数作为返回值

  • 此时 fn 就是一个高阶函数

  • 函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数

  • 同理函数也可以作为返回值传递回来

4、闭包

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

4.1、变量作用域


变量根据作用域的不同分为两种:全局变量和局部变量

  1. 函数内部可以使用全局变量

  2. 函数外部不可以使用局部变量

  3. 当函数执行完毕,本作用域内的局部变量会销毁。

4.2、什么是闭包


闭包指有权访问另一个函数作用域中的变量的函数

简单理解:一个作用域可以访问另外一个函数内部的局部变量

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

    最后

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

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

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

    img

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

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

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

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

    var reg1 = /^abc$/

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

    7.3.2、字符类

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

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

    ①[] 方括号

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

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

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

    /2$/.test()

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

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

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

    最后

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

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

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

    [外链图片转存中…(img-kQNCkKTU-1715488404208)]

    [外链图片转存中…(img-i549TAPG-1715488404209)]

    [外链图片转存中…(img-szPTLHKH-1715488404209)]

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

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

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


    1. a-z ↩︎

    2. a-z ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值