写在前面的话
复习好基础先~
(一)基础
1、原型和原型链
1)设计思想:
从设计之初,是为了简化类和对象的概念,以及实现类继承;
参考链接:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
2)prototype和__proto__区别
var a = {};
console.log(a.prototype); //undefined
console.log(a.__proto__); //Object {}
var b = function(){}
console.log(b.prototype); //b {}
console.log(b.__proto__); //function() {}
3)原型链
原型链 原型和原型链图2、webpack打包原理
webpack是一个打包模块化 JavaScript 的工具,在 webpack里一切文件皆模块,通过 Loader 转换文件,通过 Plugin 注入钩子,最后输出由多个模块组合成的文件。 webpack专注于构建模块化项目。
遵循CommonJS规范
打包模型:
利用babel完成代码转换及解析,并生成单个文件的依赖模块Map
从入口开始递归分析,并生成整个项目的依赖图谱
将各个引用模块打包为一个立即执行函数
将最终的bundle文件写入bundle.js中
流程如下:
初始化参
开始编译 用上一步得到的参数初始Compiler对象,加载所有配置的插件,通
过执行对象的run方法开始执行编译
确定入口 根据配置中的 Entry 找出所有入口文件
编译模块 从入口文件出发,调用所有配置的 Loader 对模块进行编译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理
完成模块编译 在经过第4步使用 Loader 翻译完所有模块后, 得到了每个模块被编译后的最终内容及它们之间的依赖关系
输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再将每个 Chunk 转换成一个单独的文件加入输出列表中,这是可以修改输出内容的最后机会
输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,将文件的内容写入文件系统中。
3、浏览器事件循环机制(EvenLoop)
JS的本质是单线:
1. 一般来说,非阻塞性的任务采取同步的方式,直接在主线程的执行栈完成。
2. 一般来说,阻塞性的任务都会采用异步来执行,异步的工作一般会交给其他线程完成,然后回调函数会放到事件队列中。
当主线程的任务执行完了(执行栈空了),JS会去询问事件队列
执行一个宏任务(先执行同步代码)-->执行所有微任务-->UI render-->执行下一个宏任务-->执行所有微任务-->UI render-->......
根据HTML Standard,一轮事件循环执行结束之后,下轮事件循环执行之前开始进行UI render。即:macro-task任务执行完毕,接着执行完所有的micro-task任务后,此时本轮循环结束,开始执行UI render。UI render完毕之后接着下一轮循环。但是UI render不一定会执行,因为需要考虑ui渲染消耗的性能已经有没有ui变动
浏览器环境下的 异步任务 分为 宏任务(macroTask) 和 微任务(microTask):
宏任务(macroTask):script中代码、setTimeout、setInterval、I/O、UI render;
微任务(microTask):Promise、Object.observe、MutationObserver。
当满足执行条件时,宏任务(macroTask) 和微任务(microTask) 会各自被放入对应的队列:宏队列(Macrotask Queue) 和微队列(Microtask Queue) 中等待执行。
关于async/await、promise和setTimeout执行顺序
首先,new Promise是同步的任务,会被放到主进程中去立即执行。而.then()函数是异步任务会放到异步队列中去,那什么时候放到异步队列中去呢?当你的promise状态结束的时候,就会立即放进异步队列中去了。
带async关键字的函数会返回一个promise对象,如果里面没有await,执行起来等同于普通函数;如果没有await,async函数并没有很厉害是不是
await 关键字要在 async 关键字函数的内部,await 写在外面会报错;await如同他的语意,就是在等待,等待右侧的表达式完成。此时的await会让出线程,阻塞async内后续的代码,先去执行async外的代码。等外面的同步代码执行完毕,才会执行里面的后续代码。就算await的不是promise对象,是一个同步函数,也会等这样操作
(二)算法
递归实现N的阶乘
let i=1;
const f=function(n){
if(n<=1) return 1;
return n*f(n-1);
}
(三)软件及工具
1、用Vscode
2、技术栈用Vue
参考链接:
https://www.cnblogs.com/shuiyi/p/5305435.html
https://www.jianshu.com/p/06d55a1debd5
https://juejin.im/post/6844904007463337997
https://www.jianshu.com/p/75107522813f
https://blog.csdn.net/yun_hou/article/details/88697954
以上
有前端问题/学习疑惑,可以私信我一起讨论~
网友评论