![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript
文章平均质量分 75
Coder_xuxu
热爱生活,记录学习。
展开
-
Promise、then()、catch()详解
PromisePromise是ES6新增的引用类型,通过new来实例化时需要传入执行器函数(executor)作为参数,这个执行器函数内部可以封装异步操作。Promise类的实例对象是有**状态(state)**的,对应三个值:pending(待定)、fullfilled(成功)、rejected(失败)(实例的初始状态为pending,一旦由pending状态落定成fulfilled状态或rejected状态,就不可再次改变,该过程是不可逆的)与之对应,Promise类实例对象有成功的结果(val原创 2021-11-14 14:43:53 · 10361 阅读 · 1 评论 -
JS中的Proxy和Reflect
什么是代理?代理就是对一个目标对象的替身,对代理对象的操作完全会反应的目标对象上,就好像真的在操作目标对象一样。这有点类似于C语言里面的指针,指针和对象本身并不是一个概念,只是二者存在一个“期约”,他们完全相互独立,而又能通过指针来影响对象。为什么要用代理?正如上面所说,我们通过一个和目标对象完全独立的对象就可以操作目标对象。也可以在操作代理对象来影响目标对象前,对该操作做一个监视,让我们知道做了哪些些操作,什么时候做的操作等等。好了,弄清楚什么是代理了,下面开始操练起来吧!ProxyProx原创 2021-11-13 19:34:42 · 1244 阅读 · 0 评论 -
实现jS中的-call、apply、bind
callFunction.prototype.myCall = function(thisArg, ...args) { //判断thisArg(要指向的目标对象)的类型,如果是null或者undefined就返回window,否则用Object包装一下 thisArg = (thisArg !== null && thisArg !== undefined) ? Object(thisArg) : window //将调用函数地址复制给目标对象的fn属性原创 2021-11-11 22:57:02 · 412 阅读 · 0 评论 -
浅谈JS中this的指向
this的绑定是动态的,与函数定义的位置无关,与函数的调用方式和调用的位置有关。我们来分析一下,为什么要这么说呢?因为我们无论在哪里定义了一个函数,只要没有调用这个函数,它的this指向就没有被确定,也就this是没有被绑定。那么什么时候绑定呢?答案就是去要调用这个函数的时候,this才会被绑定。那么这个时候就要去根据函数是怎样被掉用的来判断this到底指向谁说了这么多,到底this该指向谁呀?关于调用方式:函数被单独调用(默认绑定)function foo(){ console.lo原创 2021-11-11 16:15:22 · 408 阅读 · 0 评论 -
从内存的角度浅谈JS中的闭包以及闭包造成的内存泄漏
关于JavaScript中闭包以及对闭包所造成的的内存泄漏的一些理解。什么是闭包?一个可以访问外层作用域的函数就是一个闭包关于闭包的概念在论坛里每个人都有自己的观点,其实不难理解。我们可以这样想,在一对嵌套函数中,子函数是一定具备访问父函数内部变量的本领的,子函数无论是否真的引用了父函数中的变量,它都始终具备这样的本领,那么在这一对嵌套函数中就形成了闭包。所以,从广义的角度讲**任何一个函数都是闭包,它都具备访问外层作用域的本领。**从狭义的角度讲,一个子函数确确实实的访问了父函数中的变量,那么它一定原创 2021-11-10 22:21:16 · 602 阅读 · 0 评论 -
JS中的防抖与节流
关于JavaScript中防抖与截流的详细介绍(偏基础)。我们可以想象一下:对于一个要输入信息的输入框,我们最终想要输入的肯定是在输入完成时输入框中的整个字符串去触发响应,那么对于这个过程,响应如果不加以限制我们在每次输入一个字符后都会触发响应,如果频繁的输入字符或者删除字符就会造成响应卡顿。let Input = document.getElementsByTagName('Input')[0]function test() { console.log(Input.value)}In.原创 2021-11-03 20:58:17 · 301 阅读 · 0 评论 -
Promise中的finally、all、race方法
这两天看了一些关于Promise的内容,记录并总结一下学习内容Promise.prototype.finally该方法接收一个onFinally处理程序作为参数,不同于then和catch方法,该方法不关心最后落定成什么状态,只要状态由默认状态落定成功状态或失败状态,该处理程序都会执行。该方法不关心最后的结果,所以onFinally处理程序不接受参数,let promise = new Promise((res, rej) => { setTimeout(() => {原创 2021-10-24 17:32:31 · 1067 阅读 · 0 评论 -
数据结构-栈
最近复习了一遍数据结构,记录学习内容。什么是栈?栈是一种遵循**后进先出(LIFO)**原则的有序集合。栈的两端分别叫做:栈顶,栈底。最先入栈的元素被压入栈底,新添加的元素会保持在栈顶。在栈中,越先入栈的元素越接近栈底,越后入栈的元素越靠近栈顶。这个结构类似于一个水桶,先放进去的东西被压在下面,而后放进去的东西反而在顶部,是最先被拿出来的。这里A先入栈,一定是最后出栈的,F最后入栈,处于栈顶,一定最先出栈。创建一个栈(这里没有考虑私有属性)class Stack { constr原创 2021-10-22 10:00:56 · 80 阅读 · 0 评论 -
JS中的原型和原型链
构造函数、实例、原型三者的关系在JavaScript中每创建一个函数,就会为这个函数创建一个prototype属性,该属性指向函数的原型对象,而这个原型对象在默认情况下会有一个名为constructor的属性指回构造函数。//定义构造函数function Person(){}//拿到Person的原型对象let pro=Person.prototype//给原型添加属性pro.name="Kobe"pro.age=16//验证Person的原型对象的constructor属性是否指回原创 2021-10-12 18:21:01 · 120 阅读 · 0 评论 -
JS中构造函数和普通函数的区别
构造函数也是函数,来看代码://定义构造函数function Person(name){ this.name=name Person.prototype.age=16}//创建实例对象let p=new Person('Kobe')console.log(p.name) // Kobeconsole.log(p.age) // 16//创建普通函数function getName(){ console.log(p.name)}//调用普通函数getNam原创 2021-10-12 15:34:44 · 305 阅读 · 0 评论 -
浅谈JS中的执行上下文和作用域链(进阶)(包含变量提升原理、AO、VO等)
关于JS中的执行上下文和作用域链的介绍,本篇是进阶篇,关于变量提升的原理和上下文的创建相关内容点这里,关于关上下文和作用域链内容请看基础篇先看两段代码:function test1() { console.log(a) console.log(b) var b="变量b的值" var a console.log(a) console.log(b) a=1 console.log(a) //a() function a(原创 2021-09-29 14:19:41 · 256 阅读 · 0 评论 -
JS中字符串常用的几个方法
写在前面字符串原始值本身是没有属性和方法的,在调用相关属性和方法时后台会创建对应的原始包装类型对象,进而暴露出属性和方法举个例子:let str="hello,world"console.log(str.length) //11在第二行打印语句相当于执行了如下代码:let str=new String("hello,world") //临时创建一个String实例console.log(str.length) //11在执行打印语句后创建的String实例对象会被销毁书归正传从原创 2021-09-28 14:59:11 · 137 阅读 · 0 评论 -
变量提升练习题
今天有学习前端的小伙伴分享了几个有关变量提升的题目,觉得很有代表性,正好记录下来。例::console.log(a) var a = 12 function test() { console.log(a) a = 13}test()console.log(a)打印结果:分析:首先,全局变量a会提升,对于1,2行相当执行了如下代码var aconsole.log(a) //这里的a相当于只声明但未赋值 undefineda=12代码执行流进入test函原创 2021-09-24 23:00:08 · 450 阅读 · 0 评论 -
JS中的垃圾回收机制
今天看了JavaScript高级程序设计第四版中的内存部分,里面涉及到了垃圾回收的相关内容。又顺便看了几篇大佬们写的博客,下面来总结一下今天收获的知识点 。垃圾回收JavaScript是一门使用垃圾回收的语言,也就是执行环境负责在代码执行时管理内存。JS不同于其他的编程语言,比如在C,C++中每当我们为变量在堆内存中开辟一块空间后往往需要开发者去手动的回收掉变量,而在JS中是通过自动内存管理实现内存分配和闲置资源回收,这不在需要开发者去“亲力亲为”的释放申请的内存空间。垃圾回收原理垃圾回收程序会每原创 2021-09-22 22:41:37 · 201 阅读 · 0 评论 -
浅谈JS中的执行上下文和作用域链(基础)
执行上下文对于执行上下文(简称“上下文”),我们可以将其理解成变量或函数的代码运行环境,在JS中的执行上下文一共有三种:全局上下文、函数上下文、eval。每一个上下文环境都会有它关联的变量对象,这个变量对象保存了这个上下文环境中的所有的数据,包括:变量和函数。全局上下文与函数上下文在最外层的上下文就是全局上下文,函数上下文可以通过作用域链去访问保存在全局上下文中的数据。所有上下文会在其所有代码执行完毕后销毁,全局上下文会在关闭网页时销毁全局上下文是唯一的,程序运行立马创建原创 2021-09-21 22:51:29 · 287 阅读 · 1 评论 -
JS中的全等和不全等、等于和不等于
全等和不全等全等和不全等比较的是符号两侧的操作数,以全等操作符为例,如果操作数满足全等则返回true,否则返回false。全等和不全等操作符在做比较相等时不会转换操作数,也就是在不转换的前提下直接进行全等或不全等的比较。全等符号:===let str1="1"let str2=1console.log(str1===str2) //false不全等符号:!==let str1="1"let str2=1console.log(str1!==str2) //true相等和不相等原创 2021-09-21 13:45:53 · 3519 阅读 · 0 评论 -
JS中的原始值、引用值、按值传递
关于JavaScript中的原始值与引用值以及按值传递 对于JS中的变量只存储两种类型的值,原始值和引用值。原始值原始值就是最简单的数据,也就是几种基本数据类型的值。原始值存储在变量上,我们在访问原始值是按值访问的,操作的就是存储在变量中的实际值。let num1=5let num2=num1console.log(++num1) //6console.log(num2) //5第一行num1变量存储数值5,第二行num2初始化为num1,该变量也同样存储数值5。但是这两个变量中.原创 2021-09-20 18:32:27 · 464 阅读 · 0 评论 -
浅谈JS七种数据类型
关于JavaScript中七种数据类型的详细介绍,包括6种原始数据类型(简单数据类型)和一种复杂数据类型6种简单数据类型undefined类型undefined类型只有一个值,就是特殊值undefinedlet strconsole.log(str) //undefinedconsole.log(str===undefined) //true console.log(typeof str) //undefined当我们声明一个变量并没有对其初始化赋值时,这个变量保存的值就是undefi.原创 2021-09-18 22:18:59 · 177 阅读 · 0 评论 -
var、let、const关键字的详细解读
本篇是关于 var、let、const的区别和使用时的注意事项(超详细)var关键字作用:后接变量名,用来定义变量var num这里通过var关键字定义了一个num变量,我们没有给num初始化,此时num的值为undifinedvar str ="kobe"str=123这里通过var关键字定义了一个保存“kobe”字符串值的 变量str,str的数据类型不是被规定死的,第二行的代码改变了存储值得同时改变了数据类型(改变类型是不推荐的)声明范围(函数作用域)全局作用域下var .原创 2021-09-17 23:59:53 · 630 阅读 · 1 评论