Event loop 事件的循环和为什么使用函数

看下面的例子为什么要使用函数 function,事件中不能使用return来返回值,但是我们可以使用函数回调 来解决

        var btn=document.querySelector("button");
        btn.addEventListener("click",buttnHandler);

        var sum=0;
        function buttnHandler(){
            sum++;
            add(sum);   //如果我们在这里写了一个参数,并且传入sum,那外面的add函数就可以接受sum的值,并输出
                        //注意,事件中不能使用return  来返回sum。  这就是为什么使用函数来回调
        }
        function add(sum){
            console.log(sum);
        }
        console.log(sum);   //当点击按钮 输出0  为什么呢?

        //因为所有的事件都是属于异步,当页面加载的时候,script第一事件会执行同步操作 也就是先输出sum 0
        //而当我们点击按钮的时候 这时候的sum 也知识增加了 并没有显示,

我们知道为什么使用函数,接下来重点

*同步和异步

*同步:是指代码从上倒下依次执行,执行完一条后,在执行下一条,按照顺序和步骤执行
*异步:代码执行需要一个过程,或者需要一定时间,或者开始的时间不确定,这时候我们
*先让别的不相关的代码执行,而当前代码当执行完成后去执行一个回调函数

注意,如果代码写在script中,并且写在函数外部,那么这个代码,只能执行一次,并且是在
开始时同步执行了。显然这个方式不利于代码中交互,因此就需要写在函数中,减少代码之间
同步执行的方式。函数外通常仅用来定义变量(全局)和执行初始化函数init()


宏任物 setTimeOut setInterVal
微任务 Promise

同一队列中,先执行的是宏任物 在执行其他任务,最后执行微任务
当前队列中出现的异步,如果是微任务就会放到当前任务队列最底端,
如果是宏任物,就会出现在下一个队列的最顶端,也就是说在同一
队列中触发异步,微任务先执行,宏任物后执行
        setTimeout(() => {
            console.log("1");
            
        }, 0);

        new Promise(function (resolve,reject){
            console.log("2");
            resolve();
        }).then(function (){
            console.log("3");
        });

        console.log("4");

为什么输出 2,4,3,1 画个图在结合上面的总结  你就明白了

原文地址:https://www.cnblogs.com/xiaowie/p/13651220.html