
javascript
独步952
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
js中的事件委托或是事件代理详解
概述:那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了,借花献佛,我摘过来,大家认真领会一下事件委托到底是一个什么原理:有三个...转载 2018-03-15 16:55:17 · 174 阅读 · 0 评论 -
JavaScript 运行机制详解:再谈Event Loop
一、为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScri...转载 2018-07-18 14:46:12 · 216 阅读 · 0 评论 -
JavaScript中的递归
递归简介一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。我们来举个例子,我们可以用4的阶乘乘以4来定义5的阶乘,3的阶乘乘以4来定义4的阶乘,以此类推。factorial(5) = factorial(4...转载 2018-07-17 17:57:40 · 311 阅读 · 0 评论 -
Javascript算法——选择排序
1. 选择排序1.1 算法描述选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。通俗来说就是你们中间谁最小谁就出列,站到队列的最后边,然后继续对着剩余的无序数组说你们中间谁最小谁就出列,站到队列的最后边,一直到最后一个,继续站到最后边,这样数组就有了顺序,从小到大。1.2 算法...转载 2018-07-17 17:49:44 · 210 阅读 · 0 评论 -
Javascript算法——快速排序
1. 算法介绍1.1 算法描述快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用。快速排序是一种既不浪费空间又可以快一点的排序算法。1.2 算法步骤先从数列中取出一个数作为“基准”。 分区过程:将比这个“基准”大的数全放到“基准”的右边,小于或等于“基准”的数全放到“基准”的左边。 再对左右区间重复第...转载 2018-07-17 17:48:43 · 163 阅读 · 0 评论 -
Javascript算法——希尔排序
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。这里主要介绍希尔排序。一图胜千言:1. 算法介绍1.1 算法描述希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线...转载 2018-07-17 17:47:34 · 240 阅读 · 0 评论 -
js实现深拷贝
type函数首先我们要实现一个getType函数对元素进行类型判断,关于元素的类型判断,可以参考我另一篇博文 js中typeof和instanceof详解 ,这里用一个更简便的方法,直接调用Object.prototype.toString 方法。 function getType(obj){ //tostring会返回对应不同的标签的构造函数 var toStri...转载 2018-06-06 16:26:01 · 351 阅读 · 0 评论 -
js中__proto__和prototype的区别和关系
__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! 使用Object.getPrototypeOf()代替__proto__!!!一、prototype几乎所有的函数(除了一些内建函数)都有一个名为prototype(原型)的属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法。prototype是通过调用构造...转载 2018-05-24 16:47:11 · 468 阅读 · 0 评论 -
深入理解js构造函数
new表达式是配合构造函数使用的,例如new String(“a string”),调用内置的String函数构造了一个字符串对象。下面我们用构造函数的方式来重新创建一个实现同样功能的对象,首先是定义构造函数,然后是调用new表达式: 1234567function CO(){ this.p = “I’m in constructed object”; this.alertP = fu...转载 2018-05-24 16:38:14 · 2573 阅读 · 0 评论 -
javaScript正则表达式
一个可以帮助学习正则表达式的工具:https://regexper.com/JavaScript通过内置对象RegExp支持正则表达式有两种方法实例化RegExp对象:字面量var reg = /\bis\b/g; 说明:\b是指单词边界,匹配出is单词,修饰符g全文搜索,不添加 ,搜索到第一个匹配停止。构造函数var reg = new RegExp('\\bis\\b’,'g'); 说明:双反...原创 2018-05-18 15:44:09 · 187 阅读 · 0 评论 -
对深拷贝和浅拷贝的理解
简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果A没变,那就是深拷贝,自食其力。此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝。我们来举个浅拷贝例子:let a=[0,1,2,3,4],b=a;console.log(a===b);a[0]=1;console.log(a,b);嗯...原创 2018-03-21 10:25:03 · 322 阅读 · 0 评论 -
JavaScript中的模块化之AMD和CMD
前言: 为什么我们需要模块化开发,模块化开发的好处有哪些? 首先我们先说一下非模块化的开发方式带来的弊端。 非模块化开发中会导致一些问题的出现,变量和函数命名可能相同,会造成变量污染和冲突,并且出错时候很难排查。耦合程度高,不符合软件开发中的高内聚和低耦合的原则,所以我们就可以总结一下模块化开发的好处了: ① 解决项目中的变量污染问题。 ② 开发效率高,有利于多人协同开发。 ③ 职责单一,方便代码...转载 2018-03-19 10:53:14 · 1533 阅读 · 0 评论 -
JavaScript之数组去重
首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: 1 Array.prototype.clearRepetitionA = function(){ 2 var result = []; 3 var isRepetition; 4 for(var i=0; i<...转载 2018-03-18 10:58:53 · 194 阅读 · 0 评论 -
ES6解构赋值的应用场景
解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组、对象、字符串的解构赋值等一、变量交换1.ES6的方式{ let a=1; let b=2; [a,b]=[b,a]; console.log(a,b);}输出为2 12.ES5的方式采用中间变量的方式进行存储二、获取函数返回值是数组的情况1.ES6{ function f(){ ret...转载 2018-03-18 11:23:32 · 1180 阅读 · 0 评论 -
关于this、闭包的面试题
1、下面代码输出for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i) },0) } 2、下面代码输出,怎么输出for(var i=0;i<5;i++){ (function(i){setTimeout(function(){ console.log(i) },1000*i)})(...原创 2018-03-16 19:48:07 · 338 阅读 · 0 评论 -
js中__proto__和prototype的区别和关系?
正好这段时间在重新看这部分,写一篇回答来梳理一下吧。 proto(隐式原型)与prototype(显式原型) 1.是什么显式原型 explicit prototype property:每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象。Note:通过Function.prototype.bind方法构造出来的函数是个例外,它没有prototype属性。(感谢...转载 2018-03-15 21:54:25 · 1134 阅读 · 0 评论 -
JavaScript 中的正常任务与微任务
正常情况下,JavaScript的任务是同步执行的,即执行完前一个任务,然后执行后一个任务。只有遇到异步任务的情况下,执行顺序才会改变。这时,需要区分两种任务:正常任务(task)与微任务(microtask)。它们的区别在于,“正常任务”在下一轮Event Loop执行,“微任务”在本轮Event Loop的所有任务结束后执行。console.log(1);setTimeout(functi...转载 2018-03-15 21:49:03 · 501 阅读 · 0 评论 -
js 深拷贝
例子let a = { name: 'demo', age: 18};let b = a;b.name = 'demo1';console.log(a); // 输出 {name: "demo1", age: 18}console.log(b); // 输出 {name: "demo1", age: 18}因为JS对于对象的赋值使用的是浅拷贝,其中一个实例变...转载 2019-07-16 14:44:03 · 182 阅读 · 0 评论