16JS执行机制

Posted 秃头少女进修中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16JS执行机制相关的知识,希望对你有一定的参考价值。

16、JS执行机制

以下代码执行的结果是什么?

 console.log(1);
 
 setTimeout(function () 
     console.log(3);
 , 1000);
 
 console.log(2);

以下代码执行的结果是什么?

 console.log(1);
 
 setTimeout(function () 
     console.log(3);
 , 0);
 
 console.log(2);

1. JS 是单线程

	单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
	这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。

2. 同步任务和异步任务

​ 单线程导致的问题就是后面的任务等待前面任务完成,如果前面任务很耗时(比如读取网络数据),后面任务不得不一直等待!!

​ 为了解决这个问题,利用多核 CPU 的计算能力,html5 提出 Web Worker 标准,允许 javascript 脚本创建多个线程,但是子线程完全受主线程控制。于是,JS 中出现了同步任务异步任务

同步

​ 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。比如做饭的同步做法:我们要烧水煮饭,等水开了(10分钟之后),再去切菜,炒菜。

异步

​ 你在做一件事情时,因为这件事情会花费很长时间,在做这件事的同时,你还可以去处理其他事情。比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜。

JS中所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。

同步任务指的是:
	在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务指的是:
	不进入主线程、而进入”任务队列”的任务,当主线程中的任务运行完了,才会从”任务队列”取出异步任务放入主线程执行。

3. JS执行机制(事件循环)

4. 代码思考题

 <script>
// 1. 第一个问题 同步和异步
         console.log(1);

        setTimeout(function() 

            console.log(3);

         , 1000);

        console.log(2); // 123

// 2. 第二个问题 同步任务和异步任务执行过程
         console.log(1);

         setTimeout(function() 

           console.log(3);

         , 0);

         console.log(2); // 123

// 3. 第三个问题 js执行机制
        // 先同步后异步
        // 事件循环
        console.log(1);
        document.onclick = function() 
            console.log('click');
        
        console.log(2);
        setTimeout(function() 
                console.log(3)
            , 3000) // 123
    </script>

以上是关于16JS执行机制的主要内容,如果未能解决你的问题,请参考以下文章

执行代码时有时不显示对话框片段

JS代码执行机制

试着讲清楚:js代码运行机制

代码片段:Shell脚本实现重复执行和多进程

JS引擎的执行机制

js对代码解析机制