![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前端路漫漫
文章平均质量分 80
li_Ryan
一直以来,都是掉进写代码的无底洞,从来没有静下心,记录一些东西,曾经学过的也会慢慢遗忘。所以,开始记录一些东西吧
展开
-
刀斩js中的async/await
异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种各样的方案,试图解决这个问题。从最早的回调函数,到 Promise 对象,再到 Generator 函数,每次都有所改进,但又让人觉得不彻底。它们都有额外的复杂性,都需要理解抽象的底层运行机制。异步I/O不就是读取一个文件吗,干嘛要搞得这么复杂?异步编程的最高境界,就是根本不用关心它是不是异步。async 函数就是隧道尽头的亮光,很多人认为它是异步操作的终极解决方案。async函数async函数是使用async关键字声明原创 2021-03-28 16:39:13 · 210 阅读 · 0 评论 -
js迭代器Iterator和生成器Generator深入理解
什么是迭代器迭代器是一种特殊对象,它具有一些专门为迭代过程设计的专有接口,所有的迭代器对象都有一个next()方法,每次调用都返回一个结果对象,结果对象有两个属性:一个是value,表示下一个将要返回的值,另一个是done,它是一个布尔类型的值,当没有更多可返回数据时返回true。迭代器会保存一个内部指针,用来指向当前集合中值的位置,每调用一次next()方法,都会返回下一个可用值。如果在最后一个值返回后再调用next()方法,那么返回的对象中属性done的值为true,属性value则包涵迭代器最原创 2021-03-28 15:06:53 · 409 阅读 · 0 评论 -
js原型链避坑指南
认识原型对象和原型链在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象 Object和函数对象 Function。一般而言,通过 new Function 产生的对象是函数对象,其他对象都是普通对象。举例说明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..原创 2021-03-25 23:29:57 · 138 阅读 · 0 评论 -
一把搞通变量提升,闭包,this指向~
变量提升定义:变量提升是当栈内存作用域形成时,JS代码执行前,浏览器会将带有var, function关键字的变量提前进行声明 declare(值默认就是 undefined),定义 defined(就是赋值操作),这种预先处理的机制就叫做变量提升机制也叫预定义。词法作用域,不会被提升,只会在定义以后才有;同一作用域禁止重复声明。例: var a=1; let a=1; 报语法错误。const定义常量,在使用时必须初始化值,常量也不会被提升到做作用域顶部。const和let都是块级标识符。c原创 2021-03-25 20:53:33 · 113 阅读 · 0 评论 -
js执行机制分析
本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论:javascript是按照语句出现的顺序执行的看到这里读者要打人了:我难道不知道js是一行一行执行的?还用你说?稍安勿躁,正因为js是一行一行执行的,所以我们以为js都是这样的:let a =转载 2021-03-25 10:39:28 · 76 阅读 · 0 评论 -
Promise剖析,撕烂了它
promise用法都知道,再简单介绍一下:Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。按照标准来讲,resolve是将Promise的状态置为fullfiled,reject是将Promise的状态置为rejected。var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(functi原创 2021-03-24 20:14:20 · 142 阅读 · 0 评论 -
react函数组件性能优化
简言一直以来,忙于项目,项目是真的繁琐,相信看到这篇文章得同学应该有相同的感触,(PS:项目害人呐,唯一能积累的可能就是业务场景了,搬砖搬砖,没完没了)。虽然一直再用react写各个模块,但仔细想想却没时间真正的去研究它。趁个空挡,开始研究一下吧。后续我也开始慢慢更新一些react相关得文章,感兴趣得同学可以关注一下。性能优化点性能优化是个老生常谈得问题,更多的方法论可以在具体学习,针对react得函数组件,应该和类组件想要优化得点一样吧减少重复得计算量 (某些复杂计算,可以避免就避免重原创 2021-03-18 19:32:13 · 417 阅读 · 0 评论 -
Object.defineProperty详解及理解
引用于MDN 文档Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。语法:Object.defineProperty(obj, prop, descriptor)参数obj要定义属性的对象。prop要定义或修改的属性的名称或Symbol。descriptor要定义或修改的属性描述符。备注:应当直接在Object构造器对象上调用此方法,而不是在任意一个Object类型的实例上调用在ES6中,由...转载 2021-03-17 11:10:40 · 1465 阅读 · 0 评论 -
对js函数柯里化的理解
维基百科:柯里化,英语:Currying,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。从字面意思就可以理解了,对应到js,我的理解就是将一个接受多个参数的函数,转化为接收一个参数,并且不改变输出结果的一种办法。我觉得这就是js的柯里化从字面上理解,看似挺好理解,上个例子:// 简单的相加函数var add = function (x,y) { return x + y}// 调用:add(1,原创 2021-03-16 16:36:50 · 163 阅读 · 0 评论 -
js定义函数时用 var a = function () {} 和 function a() {}的区别
根本原因: 变量定义提升,特殊点,function a(){}这个全局函数,也会提升,而且提升时就已经定义了a 的值,如果var 定义a,虽然a变量提升了,但也仅仅是定义了,还是空值简单的说 如果我们使用var a = function() { /* code */}; 这种方式, 编译后变量声明 a 会“被提前”了,但是他的赋值(也就是code)并不会被提前。就是说 a 只有在被调用时才被初始化。如果我们使用function a () { /* code*/}; ...原创 2021-03-16 10:14:46 · 974 阅读 · 0 评论 -
js内存回收机制以及避免内存泄漏
js中定义得变量,对象,函数,等都会占用内存,常见类型占用内存如下:bealoon占用4个bytesstring占用2个bytesnumber因为是64位标识符所以为8bytesnull不会占用内存特别指出:object得key值也会占用内存浏览器内存周期分为:内存分配 内存使用 内存释放js内存回收机制:1.引用计数:语言引擎有一张"引用表",保存了内存里面所有资源(通常是各种值)的引用次数。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放原创 2021-03-16 09:38:45 · 586 阅读 · 0 评论