【04.16】面试题

70 阅读1分钟

1、commonjs和esm的区别

cjs

在运行时导出一份静态的值的拷贝
动态加载,依次执行代码,执行时遇到require,在加载其他模块并运行模块代码
动态加载的路径可以动态计算出来
依赖适时加载,首先执行当前模块,遇到动态导入的模块之后,会记载模块并执行代码,执行完之后会回来执行当前模块的代码

esm

动态绑定,预留出接口,在运行时动态的获取到导出变量的值并返回
静态加载,在分析出所有的模块依赖之后,再执行代码,执行的顺序是从最深层的模块依次向外执行
静态加载的路径只能值一个固定的字符串,因为静态加载是先解析依赖关系再执行代码
依赖提前加载,所有依赖加载完再执行代码

zhuanlan.zhihu.com/p/462189220

2、css加载会阻塞页面吗

css加载不会阻塞dom解析,css解析和dom解析是并行的过程
css加载会阻塞dom渲染,因为dom渲染依赖css,所以必须等到css解析完才能渲染
css加载会阻塞js执行
由于浏览器有FOUC机制,如果将link标签放在html底部,css就会阻塞link标签后的dom的解析,因为FOUC机制会将已经解析完成的dom和css先进行部分渲染,然后再继续解析剩下的dom,在这种情况下,DOMContentLoaded可能会晚于load事件的执行
所以一般建议,css文件放在头部 juejin.cn/post/706124…

3、轮播图