# JavaScript 深度剖析 **Repository Path**: xufazhang/javaScript-depth-analysis ## Basic Information - **Project Name**: JavaScript 深度剖析 - **Description**: 模块一 :函数式编程与 JS 异步编程、手写 Promise 模块二 ES 新特性与 TypeScript、JS 性能优化 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-12-17 - **Last Updated**: 2023-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: 技术深耕 ## README ### 一、使用高阶函数的意义 - 抽象可以帮我们屏蔽细节,只需关注与我们的目标 - 高阶函数是用来抽象通用问题 ### 二、闭包 - 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员 - 闭包本质:函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员 - 代码案例:文件 04-Closure.js ### 三、纯函数 - 相同的输入永远会得到相同的输出,而且没有任何可观察的副作用 #### 1. 纯函数的好处 - 可缓存:可以把纯函数运行的结果缓存起来(代码示例:07-memoize.js) - 可测试: 纯函数让测试更方便 - 并行处理: 纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数 ### 四、lodash的作用 #### 1. Lodash 消除了使用数组的麻烦,让 JavaScript 处理数字、对象、字符串等等变得更简单。Lodash的模块化方法适用于: - 迭代数组、对象和字符串 - 操作和测试值 - 创建复合函数 ### 五、函数柯里化 #### 1. 柯里化: - 当一个参数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变) - 然后返回一个新函数接收剩余的参数,返回结果 #### 2. lodash 中的柯里化函数(eg _curry(func)) - 功能:创建一个函数,该函数接收一个或多个 func 的参数,如果 func 所需要的参数都被提 供则执行 func 并返回执行的结果。否则继续返回该函数并等待接收剩余的参数。 - 参数:需要柯里化的函数 - 返回值:柯里化后的函数 #### 3. 柯里化案例: - 09-curry-demo.js #### 4. 柯里化原理模拟代码: - 10-cury.js #### 5. 总结 - 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数 - 这是一种对函数参数的'缓存' - 让函数变的更灵活,让函数的粒度更小 - 可以把多元函数转换成一元函数,可以组合使用函数产生强大的功能 ### 六、JavaScript异步编程 #### 1. promise链式调用 - promise.then().then() - 代码位置:/JavaScript-promise/04-promise-chain.js #### 2. catch错误捕捉 - promise.then().catch() - 代码位置:/JavaScript-promise/05-promise-catch.js #### 3. promise 静态方法 - Promise.resolve - Promise.reject - 代码位置: /JavaScript-promise/06-promise-static.js #### 4. promise 并行执行 - Promise.all - Promise.race - 代码位置: /JavaScript-promise/07-promise-parallel.js