kongmingLatern / daily_plan

Record Your daily plan
1 stars 0 forks source link

2023-01-27 #23

Open kongmingLatern opened 1 year ago

kongmingLatern commented 1 year ago

2023-01-27

1. 你学习了哪些知识?

2. 学习过程中是否有存在的问题?

关于如何写每日任务:

如何写每日任务

kongmingLatern commented 1 year ago

今日学习总结

1. 包管理工具

1.1 package.json

1.1.1 dependencies 属性
1.1.2 devDependencies 属性
1.1.4 version

semver 版本规范 X.Y.Z

1.1.5 ^ 与 ~ 的区别

2. npm install 原理

2.1 原理图

![[Pasted image 20230127123857.png]]

3. ES Module 的解析流程

3.1 阶段一:构建

根据地址查找 js 文件,并且下载,将其解析成模块记录(Module Record

![[Pasted image 20230127125003.png]]

3.2 阶段二:实例化

对模块记录进行实例化,并且分配内存空间,解析模块的导入和导出语句,把模块指向对应的内存地址

3.3 阶段三:运行

运行diamante,计算值,并且将值填充到内存地址中

阶段二和三示意图 ![[Pasted image 20230127125019.png]]

4. apply

Function.prototype.execFn(thisArg, otherArgs, fn) {
    // 1. 获取 thisArg,并且确保是一个对象类型
    thisArg = (thisArg === null || thisArg === undefined) 
    ? window
    : Object

    // thisArg.fn = this
    Object.defineProperty(thisArg, "fn", {
        enumerable: false,
        configurable: true,
        value: fn
    })
    thisArg.fn(...otherArgs)
    delete thisArg.fn
}
Function.prototype.myapply = function(thisArg, otherArgs) {
    this.execFn(thisArg, otherArgs)
}