# 困难

# 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');

  1. 将相对路径转为绝对路径
  2. 根据路径判断有无缓存,有缓存则直接返回当前模块下缓存中的exports内容。结束
  3. 无缓存,则创建一个一个module的时例,并缓存起来
  4. 取出模块后缀,根据后缀查找不同的方法并执行。
  5. 如果是json文件就直接赋值给module.exports。结束
  6. 如果是js文件。
    1. 将js文件进行包裹
    2. 使用vm模块执行被包裹的函数字符串,转换为真正的函数。
    3. 利用call调用函数,从而修改module.exports的值
    4. 结束。

# 4、前端性能定位以及优化指标。

  • 我们可以从 前端性能监控-埋点以及 window.performance相关的 api 去回答
  • 也可以从性能分析工具 Performance 和 Lighthouse
  • 还可以从性能指标 LCP FCP FID CLS 等去着手
Last Updated: 5/22/2022, 4:32:01 PM