袁磊老师的课,ES6上节课的复习小练习

1.promise的小练习

<script>
        // 这是一个关于promise的小练习,老师领着复习一下
        var p = new Promise(function (resolve, reject) {
            //logic
            resolve("data from p!!");
        });
        //   后续的操作有两个参数,如果只写一个,那么就是成功,第二个参数就是失败的事件
        p.then(data => "hello " + data).then(data => {
            console.log(data);
            //下面的return表示的是一个异步操作中的异步操作
            return new Promise((resolve, reject) => {
                resolve("world" + data);
            })
        }).then(function (data) {
            console.log(data);
        }).catch(function (error) {
            console.log(error);
        });
    </script>

在这里插入图片描述

2.同步异步的练习
这里的练习大家分开练习哦,多了会很复杂,一个一个看,解释都放在代码的注释中了哦

    <script>
        // *****************练习1******************
        setTimeout(function () {
            console.log("in timeout");
        }, 0);
        console.log('out of timeout');
        //setTimeout中的console后输出,setTimeout是异步代码,独立的,和其他代码没有关联


        // ****************练习2****************
        for (var i = 0; i < 8; i++) {
            setTimeout(function () {
                console.log(i);
            }, 10);
            // 这里输出的结果是8
            // 因为当10毫秒之后,i的值已经加到了8。就算是0秒之后,i的值也能加到8,计算机的速度相当强大!!!
        }
        console.log('out of timeout'); //先输出这个同步的结果,再输出上面for循环里的8个8.
        console.log(i);


        //*************************** 练习3,将var改为let,let只在这个块内有效*************************
        for (let i = 0; i < 8; i++) {
            setTimeout(function () {
                console.log(i);
            }, 0);
        }
        console.log('out of timeout ');
        console.log(i);
        // 会发现,有报错,最后一句里打印的i是未定义的。


        // ********************练习4,console作为参数放在setTimeout中*************************
        for (var i = 0; i < 8; i++) {
            setTimeout(console.log, 10, i);
            // console.log作为参数放在setTimeout中的时候,setTimeout的第二个参数是需要等待的时长,后面的所有参数都是第一个参数(一个函数)的参数。
            // 例如上面的这行代码,第一个参数是一个console函数,后面的第三个参数i就是console.log的参数了
            // 注意这里的setTimeout的第一个参数可以是其他任何的函数。
            // 这里就是函数的闭包哦~     i不能被释放,在setTimeout的这段时间里,i产生了副本。
                    }
        console.log('out of timeout ');
        console.log(i);

        // **********************练习5*************************
        for (var i = 0; i < 8; i++) {
            setTimeout((function () {
                console.log(i);
            })(i), 100000);
        }
        // 上面的setTimeout函数,是在函数里定义了一个函数,然后立即调用这个函数的意思,
        // 在setTimeout函数中定义了一个函数:function,紧接着function后面跟了一个(i),这里的意思就是让function立马执行,给了一个参数i。
        console.log('out of timeout ');
        console.log(i);
    </script>

猜你喜欢

转载自blog.csdn.net/qq_43511842/article/details/89152928