# 困难
# 1、ES6中let的实现原理
原始 es6 代码
var funcs = [];
for (let i = 0; i < 10; i++) {
funcs[i] = function () {
console.log(i);
};
}
funcs[0](); // 0
babel 编译之后的 es5 代码(polyfill)
var funcs = [];
var _loop = function (i) {
funcs[i] = function (){
console.log(i);
}
}
for(let i = 0; i< 10; i++) {
_loop(i);
}
funcs[0]();
# 2、如何设计一个渲染引擎。
# 3、require的实现原理
const amodule = require('./a.js');
- 将相对路径转为绝对路径
- 根据路径判断有无缓存,有缓存则直接返回当前模块下缓存中的exports内容。结束
- 无缓存,则创建一个一个module的时例,并缓存起来
- 取出模块后缀,根据后缀查找不同的方法并执行。
- 如果是json文件就直接赋值给module.exports。结束
- 如果是js文件。
- 将js文件进行包裹
- 使用vm模块执行被包裹的函数字符串,转换为真正的函数。
- 利用call调用函数,从而修改module.exports的值
- 结束。
# 4、前端性能定位以及优化指标。
- 我们可以从 前端性能监控-埋点以及 window.performance相关的 api 去回答
- 也可以从性能分析工具 Performance 和 Lighthouse
- 还可以从性能指标 LCP FCP FID CLS 等去着手
← 中等