![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaScript 高级
文章平均质量分 90
JavaScript 高级内功修炼
lin-lins
这个作者很懒,什么都没留下…
展开
-
7、 函数式编程(纯函数的好处、柯里化使用和实现、代码组合compose、pipe)
我们追求的是那种可靠的,每次都能返回同样结果的函数,而不是像 splice 这样每次调用后都把数据弄得一团糟的函数,这不是我们想要的。4、curried的if分支判断,参数个数3,小于4,继续返回一个函数Fn2(函数名字不重要,没有名字也可以),Fn2的函数体是一个执行。柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)©。纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用(不会影响别人)。我们把它们重命名一下。原创 2024-06-19 17:41:58 · 834 阅读 · 0 评论 -
6、 垃圾回收 & 浏览器事件循环
分代式机制,垃圾回收,内存管理,事件循环运行机制原创 2024-06-17 17:43:47 · 900 阅读 · 1 评论 -
5、JavaScript 模块化详解
将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起;块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信;CommonJS规范主要用于服务端编程,加载模块是同步的,这并不适合在浏览器环境,因为同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD CMD解决方案;AMD规范在浏览器环境中异步加载模块,而且可以并行加载多个模块。不过,AMD规范开发成本高,代码的阅读和书写比较困难,模块定义方式的语义不顺畅;原创 2024-06-17 15:42:32 · 555 阅读 · 0 评论 -
4.2、浏览器请求详解(ajax、fetch、axios使用,手写ajax)
Ajax 是Async Javascript And Xml的简称,它是原生JavaScript的一种请求方案,利用 XMLHttpRequest 进行异步请求数据,实现无感刷新数据;Fetch 是 ES6 新推出的一套异步请求方案,它天生自带 Promise,同时也是原生的,如果在较小项目中为了项目大小着想和兼容性不是那么高的前提下不妨可以用它来进行异步请求也是不错的;Axios 是基于 Ajax 和 Promise 封装的一个库,可以利用Promise来更好的管控请求回调嵌套造成的回调地狱;原创 2024-06-16 22:10:34 · 932 阅读 · 0 评论 -
4.1、浏览器事件详解(DOM事件、事件捕获&事件冒泡、事件对象、事件委托;浏览器事件兼容写法)
在 testUl捕获事件上使用 event.stopPropagation(),事件执行到testUl捕获,不会往下执行testIi捕获->testIi冒泡->testUl冒泡->testDiv冒泡->document冒泡->window冒泡,阻止事件向后传播。在 testIi冒泡事件上使用 event.stopPropagation(),事件执行到testIi冒泡,不会往下执行estUl冒泡->testDiv冒泡->document冒泡->window冒泡,阻止事件向后传播。最先触发 click 事件。原创 2024-06-15 10:29:03 · 889 阅读 · 0 评论 -
3.3、实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有N个。
实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有N个。3、add返回的是一个Promise,因为后面有then调用,所以需要用resolve返回结果。2、执行完一个任务后,加入新任务进行执行。1、判断任务是执行还是进入等待。原创 2024-06-15 10:23:15 · 221 阅读 · 0 评论 -
3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)
超详细手写Promise;实现all,race,allSettled,any;async/await和Promise关系;async/await使用原创 2024-06-13 12:14:13 · 1254 阅读 · 0 评论 -
3.2、理解Promise/A+规范
理解Promise/A+规范原创 2024-06-13 12:08:00 · 648 阅读 · 0 评论 -
2、面向对象编程/原型及原型链(手写call,apply,bind,new;创建对象的多种方式&优缺点;继承的多种方式&优缺点)
根据作者的意思,构造函数和普通函数的区别在于:当使用new+构造函数创建对象时,如果构造函数内部没有return语句,那么默认情况下构造函数将返回一个该类型的实例,但如果构造函数内部通过return语句返回了一个其它类型的对象实例,那么这种默认的设置将被打破,构造函数最终返回的实例类型将以return语句中对象实例的类型为准。原型链继承思路:让子类的原型等于父类的实例,如下图,原型链的关键在于子类的原型等于父类的实例Student.prototype=new Person(),形成原型链。原创 2024-06-06 21:02:49 · 875 阅读 · 0 评论 -
1、this指针/闭包/作用域
前景,ECStack = [ globalContext ];压入全局上下文函数checkscope被创建,保存父级作用域链到函数内部属性 [[scope]]2.创建 checkscope 函数执行上下文,checkscope 函数执行上下文被压入执行上下文栈3.函数checkscope开始做准备工作,第一步:复制函数[[scope]]属性创建作用域链checkscopeContext = {//执行上下文添加作用域链。原创 2024-06-04 15:17:34 · 946 阅读 · 0 评论