https://class.imooc.com/fearchitect#Anchor
https://class.imooc.com/webfullstack#Anchor
module.exports与exports,export与export default之间的关系和区别
首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念。
1. CommonJS模块规范
Node应用由模块组成,采用CommonJS模块规范。
根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
1 | var x = 5; |
上面代码通过module.exports输出变量x和函数addX。
require方法用于加载模块。
1 | var example = require('./example.js'); |
2. exports 与 module.exports
优先使用 module.exports
为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。
1 | var exports = module.exports; |
于是我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。
注意,因为 Node 模块是通过 module.exports 导出的,如果直接将exports变量指向一个值,就切断了exports与module.exports的联系,导致意外发生:
1 | // a.js |
参考 the-difference-between-module-exports-and-exports
ES6模块规范
不同于CommonJS,ES6使用 export 和 import 来导出、导入模块。
1 | // profile.js |
需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
1 | // 写法一 |
3. export default 命令
使用export default命令,为模块指定默认输出。
1 | // export-default.js |
4. 相关链接:
CommonJS规范,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的语法,http://es6.ruanyifeng.com/#docs/module
JS和CSS的预加载和异步加载
JavaScript是个单线程语言,**渲染引擎和JS引擎不是同时进行的**。所以提前引入js文件可能会造成堵塞,从而影响页面加载,出现闪屏等情况。于是为了解决这种情况,就出现了js在body最后引入、script标签中defer和async异步加载JS的方式。
defer:如果script
标签设置了该属性,**则浏览器会异步的下载该文件并且不会影响到后续DOM
的渲染**。如果有多个设置了defer
的script
标签存在,则会按照顺序执行所有的script。``defer
脚本会在文档渲染完毕后,**DOMContentLoaded
事件调用前**执行。
\async:**async浏览器立即异步下载文件,不同于defer得是,**下载完成会立即执行**,此时会阻塞dom渲染,所以async的script最好不要操作dom。因为是下载完立即执行,**不能保证多个加载时的先后顺序**。
引用网上的图片(可以明显的看出来区别):
另外还有带有**type=”module”**的<script>
,都是异步加载,不会造成堵塞浏览器,即等到整个页面渲染完,再执行模块脚本,等同于打开了<script>
标签的defer属性。
1 | <!-- 等到整个页面渲染完,再执行模块脚本 --> |
preload和prefecth是link标签上的属性
preload:让浏览器**提前加载指定资源(加载后并不执行)**,需要执行时再执行
prefetch:它告诉浏览器,这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低。也就是说prefetch通常用于加速下一次导航,而不是本次的。被标记为prefetch的资源,将会**被浏览器在空闲时间加载**。。
页面布局
常见布局、居中以及自适应方案,动画等
js基础以及进阶
原型链、回收机制、EventLoop、闭包、Promise、ES6等
- proxy
- service work
框架掌握
vue
生命周期、diff 算法、双向绑定实现等
react
angular
typescript
浏览器及网络
渲染原理、缓存机制、http/https 协议、WebSocket、Ajax、跨域处理等
前端安全
XSS 、CSRF 等
辅助开发
git、node、DevOps等
工程化
webpack、vite、rollup、gulp、grunt
小程序/多端开发
uniapp、flutter、react-native、Electron
算法以及架构
常见算法(排序、动态规划、分治、贪心法、穷举法、回溯法等)以及设计模式(工厂模式、单例模式、适配器模式、装饰模式、代理模式、观察者模式)
本文链接: http://www.ionluo.cn/blog/posts/af386db7.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!