【学习】es6(4)

2022.1.19-2022.1.20(19号出门一整天,学得少)

【1】严格模式

1.为脚本开启

为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句"use strict" 或'use strict'

<script>
    'user strict';
	console.log("这是严格模式。");
</script>

2.为函数开启

若要给某个函数开启严格模式,需要把"use strict"'use strict'声明放在函数体所有语句之前

"use strict" 放在函数体的第一行,则整个函数以 "严格模式"运行。

<script>
        'use strict';
        //   下面的js 代码就会按照严格模式执行代码
    </script>
    <script>
        (function() {
            'use strict';
        })();
    </script>
    <!-- 为某个函数开启严格模式 -->
    <script>
        // 此时只是给fn函数开启严格模式
        function fn() {
            'use strict';
            // 下面的代码按照严格模式执行
        }

        function fun() {
            // 里面的还是按照普通模式执行
        }
    </script>

【2】高阶函数

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

<script>
        // 高阶函数- 函数可以作为参数传递
        function fn(a, b, callback) {
            console.log(a + b);
            callback && callback();
        }
        fn(1, 2, function() {
            console.log('我是最后调用的');

        });

    </script>
<script>
    function fn(){
        return function() {}
    }
</script>
  • 此时 fn 就是一个高阶函数
  • 函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数
  • 同理函数也可以作为返回值传递回来

【3】闭包

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

1.在chrome中调试闭包

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

2)设置断点。

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

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

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

2.闭包练习

点击li输出索引号

<body>
    <ul class="nav">
        <li>榴莲</li>
        <li>臭豆腐</li>
        <li>鲱鱼罐头</li>
        <li>大猪蹄子</li>
    </ul>
    <script>
        // 闭包应用-点击li输出当前li的索引号
        // 1. 我们可以利用动态添加属性的方式
        var lis = document.querySelector('.nav').querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            lis[i].index = i;
            lis[i].onclick = function() {
                // console.log(i);
                console.log(this.index);

            }
        }
        // 2. 利用闭包的方式得到当前小li 的索引号
        for (var i = 0; i < lis.length; i++) {
            // 利用for循环创建了4个立即执行函数
            // 立即执行函数也成为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
            (function(i) {
                // console.log(i);
                lis[i].onclick = function() {
                    console.log(i);

                }
            })(i);
        }
    </script>
</body>

3.定时器中的闭包


        // 闭包应用-3秒钟之后,打印所有li元素的内容
        var lis = document.querySelector('.nav').querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            (function(i) {
                setTimeout(function() {
                    console.log(lis[i].innerHTML);
                }, 3000)
            })(i);
        }

【4】递归

函数内部自己调用自己,这个函数就是递归函数

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

<script>
        // 递归函数 : 函数内部自己调用自己, 这个函数就是递归函数
        var num = 1;

        function fn() {
            console.log('我要打印6句话');

            if (num == 6) {
                return; // 递归里面必须加退出条件
            }
            num++;
            fn();
        }
        fn();
    </script>

【5】浅拷贝

// 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
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】深拷贝

// 深拷贝拷贝多层,每一级别的数据都会拷贝
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】正则表达式

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

1.创建

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

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

2)通过字面量创建

var 变量名 = /表达式/;

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

【8】正则表达式中的特殊在字符

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

^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

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

// 边界符 ^ $
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

【9】字符类

  • 字符类表示有一系列字符可供选择,只要匹配其中一个就可以了
  • 所有可供选择的字符都放在方括号内

①[] 方括号
/[abc]/.test('andy');     // true
1
后面的字符串只要包含 abc 中任意一个字符,都返回true

②[-]方括号内部 范围符
/^[a-z]$/.test()
1
方括号内部加上 - 表示范围,这里表示 a - z 26个英文字母都可以

③[^] 方括号内部 取反符 ^
/[^abc]/.test('andy')   // false
1
方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false

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

④字符组合
/[a-z1-9]/.test('andy')    // true
【10】量词符

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

量词说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值