JavaScript单线程环境下,两个函数能否同时执行并交替输出日志?
JavaScript单线程特性与同步代码执行顺序
首先明确结论:不可能得到1、3、2、4这种交替输出结果,只能是你列出的两种顺序——要么先完整执行func1输出1、2再执行func2输出3、4,要么先完整执行func2输出3、4再执行func1输出1、2。
原因在于JavaScript的单线程核心特性:
- 单线程指的是主线程在处理同步代码时,同一时间只能执行一个任务,并且会把当前任务(比如一个函数里的所有同步语句)完整执行完毕,才会切换到下一个任务。
- 你定义的
func1和func2里的console.log都是同步代码,没有任何异步操作(比如setTimeout、Promise回调这类会延迟执行的代码)。所以不管你先调用哪个函数,该函数内的两个console.log都会被连续执行完,不会被打断去执行另一个函数的代码。
如果想要实现类似交替的输出,必须引入异步操作。比如修改其中一个函数,把某个console.log放到异步任务里:
const func1 = () => { console.log(1); // 异步任务,会被推入任务队列,等待主线程同步代码执行完再运行 setTimeout(() => console.log(2), 0); }; const func2 = () => { console.log(3); console.log(4); }; func1(); func2();
此时输出顺序会是1、3、4、2,但这已经不是你原问题中纯同步代码的场景了。
内容的提问来源于stack exchange,提问作者johann1301s
相关产品推荐
相关产品推荐

