javascript编程单线程同步模式主流的js环境都是单线程执行js代码吗?js之所以是单线程的,跟当初的设计意图有关。服务器端脚本语言的目的是实现页面的动态交互。实现页面交互的核心是dom操作,这也决定了js必须采用单线程方式处理,否则会造成严重的线程同步问题。如果多个js线程同时修改dom元素,浏览器无法明确的以那个线程的结果为标准。为了避免这个线程同步问题,js一开始就设置成单线程模式工作。这里所说的单线程是指javascript执行环境中只有一个线程负责执行代码。可以想象,执行任务的只有一个人,一个人一次只能执行一项任务。如果有多个任务,他们需要排队一个一个完成。这种模式最大的优点就是更安全、更简单,缺点也很明显。当遇到一个特别耗时的任务时,后续的任务需要等待这个任务结束,这也导致了整个程序执行的延迟和假死。案件。优点:更安全、更简单耗时的任务会导致程序卡顿。为了结束任务耗时的问题,javscript将任务的执行分为两种模式,即同步模式(Synchoronous)异步模式(Asynchronous)和同步模式Synchoronous代码顺序执行,后面的任务要等待为了完成之前的任务。同步执行比较简单,代码的执行顺序就是代码的顺序。大多数单线程是同步模式。Console是输出的打印,Callstack是执行栈,开始执行js会加载我们整体的代码,放到一个匿名函数中执行,然后一行一行开始执行。第一行执行将console.log('globalbegin')压入调用栈,控制台打印globalbeginexecutionends,弹出调用栈,然后有两个函数声明,函数声明不会生成a调用,所以接下来执行的是foo函数调用,会将foo压入调用栈,foo函数打印一条消息,然后执行bar函数,bar函数也会被放入执行栈,而执行过程中又打印了bar函数,bar执行完后弹出调用栈,然后foo函数执行结束,弹出调用栈,最后打印了一条消息,也被push了上去堆栈。全部代码执行完毕后,执行栈会被清空。在这种排队执行机制下,一行代码执行时间过长,后面的任务就会被延迟。我们称这种延迟阻塞。对于用户来说,这种阻塞会导致页面卡住或死机,所以需要用异步方式来解决程序中不可避免的耗时操作,比如ajax操作,或者nodejs中的大规模操作。文件读写原文地址:https://kspf.xyz/archives/18更多内容微信公众号搜索煮饭充饥小程序搜索煮水煮饭博客
