JavaScript
通过实例理解枯燥的定义
天天脱发也不会秃
这个作者很懒,什么都没留下…
展开
-
JS中Generator实现(yield关键字、return关键字)
1.Generator是ES6中新增的语法,和Promise一样,都可以用来异步编程。 2.Generator函数和普通函数的区别: (1)普通函数:一旦执行,就会从头走到尾,不会终止。 function normalFn(){ console.log('start') console.log('middle') console.log('end') } normalFn() (2)Generator函数 [1]Generator不是一个函数,定义generator时,使原创 2020-05-14 16:38:23 · 1000 阅读 · 1 评论 -
JS中Promise的实现(结合实例)以及执行顺序
1.Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和时间更加合理且强大。 2.特点: (1)对象的状态不受外界影响(3种状态) [1]Pending状态(进行中) [2]Fulfilled状态(已成功) [3]Rejected状态(已失败) (2)一旦状态改变就不会再变(两种状态的改变:成功、失败) [1]Pending——>Fulfilled [2]Pend——>Rejected (3)可以把Promise看成一个状态机,初始是Pending状态,可以通原创 2020-05-14 15:51:02 · 1097 阅读 · 0 评论 -
对JS中的继承的理解(通过构造函数绑定法,prototype模式法绑定,Object.create()以及ES6中的extends
1.在ES5中,可以使用以下方式解决继承问题。 (1)第一种叫构造函数绑定: 这种构造方法,只能继承父构造器中的属性,不能继承父构造器原型上的属性。 function Animal (){ this.species = 'animal'; } function Cat(name,color){ Animal.apply(this,arguments); this.name = name; this.color = color; } var cat = new Cat("damao","black"原创 2020-05-09 16:48:43 · 220 阅读 · 0 评论 -
对JS中的防抖(debounce)和节流(throttling)的一些理解(结合实例)
1.防抖(debounce):遇到延时函数的定时器,就重新计时 (1)策略: 当事件被触发时,设定一个周期延时执行动作,若周期又被触发,则重新设定周期,直到周期结束,执行动作。 在后期有拓展了前缘防抖函数,即执行动作在前,设定延迟周期在后,周期内有事件被触发,不执行动作,且周期重新设定。 (2)特点: [1]当事件快速连续不断触发时,动作只会执行一次。 [2]延迟debounce,是在周期结束时执...原创 2020-05-05 18:41:51 · 766 阅读 · 0 评论 -
JS前端模块化
在网页开发早期,JavaScript制作作为一种脚本语言,做一些简单的表单验证或动画实现,那个时候的代码还是很少的,之江将代码写在script标签里面即可。随之Ajax异步请求的出现,慢慢就形成了前后端分离,客户端需要做的事情越来越多,代码量也是与日俱增,为了应对代码量的剧增,我们通常会将代码写在多个js文件中,进行维护,但是这种维护方式,依然不能避免一灾难性的问题,比如全局变量同名问题。而且利用...原创 2019-11-12 14:43:43 · 97 阅读 · 0 评论 -
对JS中模块化的一些理解(CommonJS、AMD、ES6的模块化)
JS本身是不支持模块化的,只不过后来社区的一些大佬制定了一个模块化规范,主要分为两种: 第一种:用于服务器端的CommonJS,比如node.js中的require。 第二种:客户端的AMD,比如require.js。 后来ES6提供了模块化的方案,分为导出(export)、导入(import)两个模块。 1.首先介绍一下CommonJS(同步、服务端) (1)Node应用由模块组成,采用Comm...原创 2020-05-02 15:58:41 · 235 阅读 · 0 评论 -
对JS中深拷贝、浅拷贝的一些理解以及深拷贝常用的一些方法
1.首先我们先区分一下什么是深拷贝、什么是浅拷贝? 假设B复制了A,当修改A时,看B是否发生了变化,若B也跟着变了,那么就说明这是浅拷贝;若B没变,则说明是深拷贝。 2.通过阐述堆栈、基本数据与引用数据来理解深拷贝和浅拷贝。 (1)基本数据类型和引用数据类型的数据存储是不一样的 (2)基本数据类型——名、值都存储在栈内存中。 let a = 1; 当b复制a时,即b = a;栈内存会开辟一个内存...原创 2020-05-01 16:01:44 · 147 阅读 · 0 评论 -
对JS中new操作符的一些理解(如何自己实现一个new函数)
new操作符用于创建一个给定的构造函数的对象实例,举个例子: function Person(name,age){ this.name = name; this.age = age; } const person1 = new Person('Tom',20); console.log(person1); //Person{name:"Tom",age:20} new关...原创 2020-04-27 11:01:20 · 458 阅读 · 0 评论 -
JS中的this(通过几个例子可以加深理解)
1.首先说一下this指向的规则: this的指向在函数的定义时是确定不了的,只有函数执行时才能确定this到底指向谁,实际上 this最终的指向是那个调用它执行它的那个对象。 2.下面通过几个例子加深理解一下 例子1: function a(){ var user = “每天脱发也不能秃”; console.log(this.user); //undefined console.log(...原创 2020-04-28 09:57:32 · 161 阅读 · 0 评论 -
对JS中的闭包(块级作用域)的一些理解(为什么有时候for循环遍历会出现错误)
1.什么是闭包? 函数对其周围状态(语法环境)的引用捆绑在一起构成了闭包。也就是说,闭包可以让你从内部函数访问外部函数。在JS中,每个函数被创建时,都会在函数生成时形成闭包。 2.语法作用域: function init(){ var name = '每天脱发也不能秃头'; /name是一个被init创建的局部变量 function displayName(){ //displayName...原创 2020-05-01 13:00:48 · 380 阅读 · 0 评论 -
对JS中执行上下文的一些理解(结合实例更好理解)
1.什么是执行上下文? 当前JavaScript代码被解析和执行时所在环境的抽象概念。JS中运行的任何代码都是在执行上下文中运行的。 2.执行上下文的类型有3种,分别为: (1)全局执行上下文:这是最基础的默认的执行上下文。不在任何函数中的代码都位于全局执行上下文中。它做了两件事情: [1].创建了一个全局对象,在浏览器中的全局对象为window对象。 [2].将this指针指向这个全局对象。 注...原创 2020-04-30 12:05:39 · 339 阅读 · 0 评论 -
对JS中操作符的一些理解:[]= =![] =>true,{}= =!{}=>false
首先通过一个典型的例题来加深对上面方法的理解:[]= =![] =>true,{}= =!{}=>false. 1.根据运算符优先级,!的优先级大于= =,所以先计算![],!将变量转换为布尔类型。注意:null,undefined,NaN,空字符串(’’)取反为true,其余都为false。以此![] = false。 2.根据上面的规则,如果有一个操作数为布尔,在比较相等性之前转...原创 2020-04-27 11:49:22 · 412 阅读 · 0 评论