Js是一门单线程语言
在一个JavaScript文件或一个JavaScript代码块的内部,浏览器会先对代码进行预处理(编译),然后再执行。
预处理会跳过执行语句,只处理声明语句,同样也是按从上到下按顺序进行的。包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理。 即使声明是在调用的下方进行的,但浏览器仍然先声明再调用(执行),这个现象叫做“提升”。所以,即便一个函数的声明在下方,在前面仍然可以正常执行这个函数。
js的执行顺序
js是一门单线程语言,并不存在真正意义的异步操作。只是在执行的时候把同步执行和异步执行放在了主任务和异步任务,同步执行为主任务,异步执行为异步任务
这里涉及到异步任务的宏任务和微任务,setTimeout加入macrotask队列,是宏任务,Promise加入microtask队列,整体是异步任务,主任务执行完了之后执行异步任务 从异步任务里面先获取微任务执行,没有微任务就去宏任务栈里面获取宏任务执行,所以在一个循环内,先执行同步任务 再执行异步任务中微任务 其次执行异步任务中宏任务