浏览器微任务和宏任务在浏览器中的执行顺序如下:执行一个任务(macro-task),执行微任务队列(微任务)等。NodeNode的事件循环是通过libuv实现的,引用官网上的一张图:通用任务(宏任务)执行顺序如下:安排。挂起的回调:I/O回调,其执行被推迟到下一个循环迭代。空闲,准备:仅供系统内部使用。poll轮询:检索新的I/O事件;执行I/O相关的回调(几乎所有情况下,除了关闭的回调函数,由定时器和setImmediate()调度),其他情况node会阻塞在这里。checkdetection:这里执行setImmediate()回调函数。closecallbacks关闭回调函数:一些准备关闭的回调函数,如:socket.on('close',…)。Node中微任务和宏任务的执行顺序。Node10之前:执行一个stage的所有task,先执行nextTick队列中的内容,再执行microtask队列中的内容。Node11之后:浏览器的行为统一了,就是每执行一个macrotask就完成microtask队列。未完待续,点击查看更多详情:https://github.com/Advanced-F...从IIFE、AMD、CMD、CommonJS、UMD、webpack(require.ensure)、ESModule介绍模块化的开发过程,考虑这些角度。答:模块化主要用于抽取公共代码,隔离作用域,避免变量冲突。IIFE:使用自执行函数编写模块化。特点:在单独的函数范围内执行代码,避免变量冲突。AMD:使用requireJS编写模块化,特点:必须提前声明依赖。CMD:使用seaJS编写模块化,特点:支持动态导入依赖文件。CommonJS:nodejs自带的模块化。varfs=require('fs');UMD:兼容AMD、CommonJS模块化语法。webpack(require.ensure):webpack2.x版本中的代码拆分。ESModules:ES6引入的模块化,支持import引入另一个js。从'a'导入a;在全局范围内,用const和let声明的变量不在window上,那它在哪儿呢?如何获得?.在ES5中,顶级对象的属性相当于全局变量,var命令和function命令声明的全局变量自然也是顶级对象。vara=12;functionf(){};console.log(window.a);//12console.log(window.f);//f(){}但是ES6规定var命令和function命令声明的全局变量仍然是顶层对象的属性,但是let命令、const命令、class命令声明的全局变量不是top的属性级对象。让aa=1;constbb=2;控制台日志(窗口.aa);//undefinedconsole.log(window.bb);//哪里是未定义的?如何获得?通过设置断点,看看浏览器是如何处理的:从上图也可以看出,在全局作用域中,用let和const声明的全局变量不在全局对象中,而是一个块级作用域如何获取它在(脚本)?它可以在定义变量的块级范围内获得。既然不属于顶层对象,那么窗口(全局)就不加了。让aa=1;constbb=2;console.log(aa);//1console.log(bb);//2介绍BFC及其应用。