![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JS
文章平均质量分 65
banggan
这个作者很懒,什么都没留下…
展开
-
JavaScript中的事件循环详解
JavaScript是一门单线程的非阻塞的脚本语言,单线程意味着在代码执行的任何时候,都只有一个主线程来处理所有的任务;非阻塞则是当代码需要进行一项异步任务时(无法立即返回结果,需要一定的时间才能返回的任务,如I/O事件),主线程会挂起这个任务,然后在异步任务返回结果的时候再根据一定的规则去执行相应的回调。 但是在JS当中却无处不存在异步的概念,那JS如何实现的非阻塞呢?-事件循...原创 2018-07-16 21:08:58 · 237 阅读 · 0 评论 -
JS之this的指向理解
1.this是什么?this是对象自动生成的一个内部对象,是在运行时基于函数的执行环境绑定的,因为函数的调用场合不同,this的值也有变化。this指向什么,完全取决于 什么地方以什么方式调用,而不是 创建时 。这句话目前也只能说在ES5中才是正确的,而在ES6的箭头函数中,this的指向就是在定义的时候就确定的。2. this的绑定规则this的绑定总共差不多有下面五种:默认绑定...原创 2018-12-03 20:51:53 · 671 阅读 · 0 评论 -
通用的事件绑定的实现
考虑IE兼容性关于IE低版本的兼容性处理: IE低版本使用attachEvent绑定事件实现,使用量也比较少,很多网站并不支持。考虑代理代理是事件冒泡的一个具体应用 场景:动态随时新增元素,如一个div下面的多个a标签; 方法:将事件绑定到父级div上,通过target属性拿到具体的事件发生者div1.attachEventListener('click',functio...原创 2018-08-13 21:53:47 · 329 阅读 · 0 评论 -
js实现持续的动画
利用setInterval实现采用定时器实现window.onload=function(){ var mydiv=document.getElementById("mydiv"); var start=document.getElementById("start"); var stopmove=document.getElementById("stopmove"); var x..原创 2018-08-11 21:13:46 · 3427 阅读 · 0 评论 -
函数节流和去抖动
使用场景以下场景往往由于事件频繁被触发,因而频繁执行DOM操作、资源加载等重行为,导致UI停顿甚至浏览器崩溃。window对象的resize、scroll事件拖拽时的mousemove事件射击游戏中的mousedown、keydown事件文字输入、自动完成的keyup事件实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理;而其他事件大多的...原创 2018-08-06 08:44:28 · 383 阅读 · 0 评论 -
JS实现继承
继承方式原型链继承构造函数继承组合继承原型式继承寄生式继承寄生组合式继承ES6原型链继承核心:将父类的实例作为子类的原型。SubType.prototype = new SuperType() // 所有涉及到原型链继承的继承方式都要修改子类构造函数的指向,否则子类实例的构造函数会指向SuperType。SubType.prototype.constructor ...原创 2018-08-05 21:12:49 · 672 阅读 · 0 评论 -
ES7之async的理解
ES2017 新特性:Async Functions (异步函数) 2017年08月01日 09:15:48 阅读数:1406 ...转载 2018-07-21 22:07:28 · 1594 阅读 · 0 评论 -
数组和对象的深拷贝、浅拷贝
数组的浅拷贝首先看一下代码:let arr1=[1,3,3];let arr2 = arr1;console.log(arr2);//[ 1, 3, 3 ]arr1[1]=8;console.log(arr2)//[ 1, 8, 3 ]在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝,如上,arr的修改,会影响arr2的值,这显然在绝大多数情况下,并不是我们所需...原创 2018-07-30 10:25:05 · 346 阅读 · 0 评论 -
如何看待typeof?
typeof判断基本数据类型这种方法对于一些常用的类型来说那算是毫无压力,比如Function、String、Number、Undefined等,如:numbertypeof(10);typeof(NaN);//NaN在JavaScript中代表的是特殊非数字值,它本身是一个数字类型。typeof(Infinity);booleantypeof(true);typeof(fa...原创 2018-07-30 09:56:09 · 307 阅读 · 0 评论 -
Javascript异步编程四种方法
这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchro...转载 2018-07-20 15:26:05 · 216 阅读 · 0 评论 -
阮一峰ES6之Generator函数理解
Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。 Generator函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号,二是,函数体内部使用yield语句,定义不同的内部状态。 一、用法 function* helloWorldGenerator(){ ...原创 2018-07-19 17:50:45 · 748 阅读 · 0 评论 -
ES6之箭头函数
一、基本用法 ES6 允许使用“箭头”(=>)定义函数。var f = () => 5;// 等同于var f = function () { return 5 };var sum = (num1, num2) => num1 + num2;// 等同于var sum = function(num1, num2) { return num1 + num2;...原创 2018-07-25 10:12:59 · 249 阅读 · 0 评论 -
JavaScript内存机制
JS内存空间分为栈(stack)、堆(heap)、池(一般也会归类为栈中)。 其中栈存放变量,堆存放复杂对象,池存放常量。 一、基础数据类型 JS中的基础数据类型,这些值都有固定的大小,往往都保存在栈内存中(闭包除外),由系统自动分配存储空间。我们可以直接操作保存在栈内存空间的值,因此基础数据类型都是按值访问 数据在栈内存中的存储与使用方式类似于数据结构中的堆栈数据结构,遵循后进先出的原则。 ...原创 2018-07-24 22:26:14 · 247 阅读 · 0 评论 -
Web Worker理解
Web Workers 使得一个Web应用程序可以在与主执行线程分离的后台线程中运行一个脚本操作。这样做的好处是可以在一个单独的线程中执行费时的处理任务,从而允许主(通常是UI)线程运行而不被阻塞。 作用就是给JS创造多线程运行环境,允许主线程创建worker线程,分配任务给后者,主线程运行的同时worker线程也在运行,相互不干扰,在worker线程运行结束后把结果返回给主线程。这样做的好处是主...转载 2018-07-24 21:28:48 · 228 阅读 · 0 评论 -
阮一峰ES6之Promise对象的理解
一、Promise的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消...原创 2018-07-18 21:36:56 · 7447 阅读 · 1 评论 -
原生ajax的实现
ajax是一种异步通信技术,在ajax出现之前,客服端与服务端直接通信,有了ajax以后,通过在后台与服务器进行少量的数据交换,可以达到在不刷新整个页面的情况下实现局部刷新。 ajax的技术核心是XMLHttpRequest对象,使用ajax一般需要以下四个步骤: 1、创建对象var xhr = new XMLHttpRequest(); 注:xhr对于低版本的IE浏览器...原创 2018-07-12 09:14:02 · 239 阅读 · 0 评论 -
关于JS类型转换那点事
在牛客网上刷题,经常会遇到JS类型转换相关的题目,特总结常考、又很容易出错的考点:1、Boolean转换在JavaScript中,以下的值被当做false:,其余均为trueundefined、null、0、NaN、空字符串2、Boolean与任何类型进行比较,布尔类型转换为Number类型再做比较,如:console.log(([])?true:false);console.log([]==f...原创 2018-07-11 21:26:03 · 106 阅读 · 0 评论 -
JS异步处理的进化史
前言javascript是一门单线程的语言,也就是说一次只能完成一件任务,如果有多个任务,就需要排队进行处理。如果一个任务耗时很长,后面的任务也必须排队等待,这样大大的影响了整个程序的执行。为了解决这个问题,javascript语言将任务分为两种模式:同步:当我们打开网站,网页的页面骨架渲染和页面元素渲染,就是一大推同步任务。异步:我们在浏览新闻时,加载图片或音乐之类占用资源大且耗时久的任...原创 2019-08-25 12:37:29 · 423 阅读 · 0 评论