
JavaScript
文章平均质量分 90
Encoreeeee
这个作者很懒,什么都没留下…
展开
-
根据Promises/A+规范实现Promise(下)
在上一篇文章中我们已经把Promise库的一些基本内容都实现了,接下来我们在之前的基础上再继续增加内容。1. 给Promise增加静态方法deferred我们在之前的基础上,再给Promise构造函数上增加一个静态方法deferred,这个方法在官方的Promise定义中并不存在。该方法也是用来处理异步逻辑的,只是写法跟常规的promise有一点点不同,Promise.deferred用法如下:let dfd = Promise.deferred();$.ajax({ type: 'get',原创 2021-01-26 15:19:43 · 234 阅读 · 0 评论 -
根据Promises/A+规范实现Promise(上)
本文中大部分的内容都是依据PromiseA+规范写出来的,该规范的地址是PromiseA+规范1. 最原始的版本首先关于promise最基本的特性可以总结为以下几个点:1 Promise是一个构造函数,通过new该构造函数创建promise实例对象,new构造函数的时候传入一个函数executor,它接收两个形参resolve和reject2 new Promise得到实例对象后,该对象默认状态为pending。在executor中调用resolve后该对象状态变为fulfilled,调用reje原创 2021-01-26 15:19:22 · 273 阅读 · 1 评论 -
函数防抖与节流
1. 背景现在的不少项目中都存在类似这样的业务:页面监听鼠标滚轮事件做出对应操作、搜索输入框输入文字时下面弹出联想结果弹框(类似百度输入文字效果)等等,一般情况下会直接绑定scroll事件监听、input事件监听,如果在这些函数内部执行了其他函数,尤其是执行了操作DOM的函数,那不仅会造成计算机资源的浪费,还会降低程序运行速度,造成一些体验问题;或者在输入框频繁输入时,频繁调用后台接口,给后台造...原创 2020-02-17 11:59:09 · 266 阅读 · 0 评论 -
vue2.x和vue3.x中的双向数据绑定原理有什么不同
简单探讨一下vue2.x和vue3.x中实现数据绑定的原理有什么不同,首先vue2.x使用的是Object.defineProperty方法,这个方法不兼容IE9以下的版本;而vue3.x使用的是Proxy方法,至于什么是Proxy,待会会简单介绍一下一. vue2.x实现原理我们通过去写一个非常非常简化版的vue框架和demo来实现这个双向数据绑定,来看下实现过程1 我们创建一个html模...原创 2019-10-22 11:28:43 · 1610 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》学习笔记part3-代理模式和迭代器模式
本篇内容主要讲述JavaScript中的两个设计模式:代理模式和迭代器模式第六章 代理模式6.1 定义代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。...原创 2018-09-05 20:17:11 · 295 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》学习笔记part4-发布订阅模式
本篇内容主要讲述JavaScript中的发布-订阅模式第七章 发布-订阅模式8.1 现实中的发布-订阅模式不论是在程序世界里还是现实生活中,发布—订阅模式的应用都非常之广泛。我们先看一个现实中的例子。 小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄。好在售楼 MM 告诉小明,不久后还有一些尾盘推出,开发商正在办理相关手续,手续办好后便可以购买。 但到底是...原创 2018-09-09 18:15:23 · 229 阅读 · 0 评论 -
new Date处理日期格式及浏览器兼容问题
最近开发项目时,业务代码中有一段比较两个时间点相距是否超过3个月的逻辑,当时的条件判断语句我是这样写的:var sendDate = "2019-06-07 10:07:32";if (Date.now() - new Date(sendDate).getTime() < 7776000000) { // 具体业务逻辑}然后在测试的时候,我发现这段逻辑在Chrome是正常运行的,...原创 2019-06-08 15:55:15 · 1110 阅读 · 0 评论 -
闭包的概念、特性以及实际应用
1. 什么是闭包?闭包(closure)是函数式编程中的概念,最高实现闭包的语言是Scheme。闭包的严格定义是”由函数(环境)机器封闭的自由变量组成的几何体”,由于这个解释有些晦涩难懂,所以我们先通过一些例子来简单解释一下什么叫做闭包,然后再举一些实际应用中的例子2. 一个实例var generateClosure = function() { var count = 0...原创 2018-02-13 16:47:55 · 858 阅读 · 0 评论 -
一道有趣的面试题和相关知识补充
转载自: 伯乐在线专栏作者 - chokcoco文章地址: http://mp.weixin.qq.com/s/0QwvOHpTiAg7Io_bdUQo7g最近在网上看到这么一道面试题: 使用JS实现一个哈数, 运算结果可以满足如下要求:add(1)(2) // 3add(1, 2, 3)(10) // 16add(1)(2)(3)(4)(5) // 15然后在一片博文转载 2017-03-28 14:43:18 · 252 阅读 · 0 评论 -
针对不同浏览器的事件绑定以及鼠标滚轮事件
前段时间在看《JavaScript高级程序设计》第十三章-事件, 还没看完, 只是看到里面的一些内容觉得在这里做一个记录和总结会比较好. 首先先来讲解一下绑定事件一共有几种方式以及他们的特点和浏览器的兼容性一. DOM0级事件处理程序所谓的DOM0级事件处理程序, 就是通过JavaScript指定事件处理程序的传统方式, 就是将一个函数赋值给一个事件处理程序属性, 比方说div.o原创 2017-01-30 10:36:35 · 2341 阅读 · 0 评论 -
JavaScript中的深度克隆
javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型。原始类型对象指的是字符串(String)、数值(Number)、布尔值(Boolean),合成类型对象指的是数组(Array)、对象(Object)、函数(Function)。既然对象分为这两类,他们之间的最大差别是复制克隆的差别。普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象转载 2017-01-30 10:15:45 · 281 阅读 · 0 评论 -
关于如何取消匿名函数的绑定以及arguments.callee的用法
之前在看《JavaScript高级程序设计》第十三章P391看到关于arguments.callee的用法, 然后又翻回之前的内容, 原来在第5章引用类型P113的时候曾经讲到过这个arguments.callee, 发现这个arguments对象的属性其实有挺大的用处的, 接下来讲一讲的两大作用:作用一. 取消代码与函数名的耦合状态首先, 如果要定义一个阶乘函数,原创 2017-01-26 12:38:58 · 1499 阅读 · 0 评论 -
高性能JavaScript 循环语句和流程控制
循环语句众所周知,常用的循环语句有for、while、do-while以及for-in,forEach。除了for-in和forEach性能略低外,平时我们对前三者的选择更多的是基于需求而非性能考虑,今天我们就对它们各自的性能做个测试,告诉我们最极端的情况下还能做哪些优化。首先我们来谈谈为何for-in和forEach会比其他的慢。for-in一般是用在对象属性名的遍历上的,由于每转载 2017-02-04 16:15:09 · 225 阅读 · 0 评论 -
JavaScript排序,不只是冒泡
非常非常推荐大家去读一本gitBook上的书 -十大经典排序算法 : https://sort.hust.cc/, 本文的动图和演示代码均是这里面的。做编程,排序是个必然的需求。前端也不例外,虽然不多,但是你肯定会遇到。不过说到排序,最容易想到的就是冒泡排序,选择排序,插入排序了。冒泡排序依次比较相邻的两个元素,如果后一个小于前一个,则交换,这样从头转载 2017-05-24 11:08:07 · 313 阅读 · 0 评论 -
常用的JavaScript设计模式
设计模式太多了,貌似有23种,其实我们在平时的工作中没有必要特意去用什么样的设计模式,或者你在不经意间就已经用了设计模式当中的一种。本文旨在总结平时相对来说用的比较多的设计模式。什么是设计模式百度百科: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证转载 2018-01-27 18:51:59 · 244 阅读 · 0 评论 -
理解 JavaScript 中的策略模式
在讲解重点内容之前,我对于这里面的一个知识点困惑了好久,因此先讲解一下这个点,就是调用方法并且改变this指向的方法有2个:call和apply,两个方法的调用方式如下:(1) fnTest.call(obj, arg1, arg2, arg3, arg4....)(2) fnTest.apply(obj, [arg1, arg2, arg3, arg4, arg5])两种方法调用时参数列表不一样转载 2017-10-25 17:16:27 · 276 阅读 · 0 评论 -
[转载]阿里前端笔试总结
1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。分析:这道题主要是考核了数组的队列方法和栈方法。另外,原题还有字数限制的,只有在字数小于30并且结果正确时才可以满分。所以,我们可以使用三目运算符(: ?)来减少字数。代码如下:a.length === 0 ? a.push(1) : a.shift();转载 2017-04-22 16:22:43 · 1994 阅读 · 0 评论