1 hlj20172746

尚未进行身份认证

我要认证

非常呜呜呜

等级
TA的排名 9w+

JS中的任务队列(详解)

说起任务队列的话,首先我们要回顾一下JS语言的特点。我们知道,Javascript 这门脚本语言诞生的使命就是为处理页面中用户的交互,以及操作 DOM 而诞生的。所以JS的设计就是单线程的,总不能多线程来操作DOM结构吧(那不就乱套了吗)。那么什么是单线程,其实就是任务一个接着一个做,不能同时处理多个任务。那这样就会导致一个问题,如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。那JS是如何解决这个问题呢?我用一张图来说一下:有一说一我这个图画的是真的好!

2020-10-21 19:56:45

JS闭包的深入理解---函数防抖(详解4)

在上一篇中,我们知道了函数节流的实现方式,用原始的方法和闭包的方法,阐述二者之间的差异。那现在说到函数防抖也容易理解的多.我们可以来先看一下什么是函数防抖:一个需要频繁触发的函数,规定时间内只让最后一次生效,前面的不生效(例如搜索功能)什么意思呢,就是比如有个按钮,我kuku一直点击它,那么在一定时间内(时间是我自己设置的)只有最后一次生效。OK,似乎就是和函数节流反过来,现在我们用原来的方法实现一下他:<button id="btn1">原始方法</button>

2020-10-19 21:00:27

JS闭包的深入理解---函数节流(详解3)

有了上两篇关于闭包的理解,我们就可以用闭包来实现一些功能。而函数节流就是一个很经典的例子:首先我们来解释一下什么是函数节流:一次函数执行后,只有大于设定的执行周期才执行第2次。有个需要频繁触发的函数,处于优化的性能考虑,在规定时间内,只让函数触发第一次生效,后面的不生效。意思就是,比如有个按钮,你kuku一直点,我设置成两秒内只有第一次生效,后面的不会生效,哎这就是函数节流。我先用传统的方法实现一下:首先有一个按钮,再来一个方法: var f1 = function () {

2020-10-19 14:58:13

JS闭包的深入理解(详解2)

OK,通过上一篇文章,我们理解了闭包是怎么实现的后,我们就可以看一个比较经典的小例子了。如图,如果我在网页上显示了一个ul,里面有3个li,然后我给这三个li绑定点击事件,所实现出的效果是点击第一个li就打印1,点击第二个li就打印2,点击第三个li就打印3。OK,似乎并不是很难,如果我们用之前固有的理解方法似乎可以这么写: var oul1=document.getElementById('ul1'); var oli1= oul1.getElementsByTagName('li

2020-10-19 09:33:24

JS闭包的深入理解(详解1)

OK,如果说到JS中的闭包,给我的感觉就是它能很好地体现出JS函数式编程的特点。它不同于我们之前学的C,C++,JAVA中,函数只能被声明,调用,或者是类的成员方法。在JS中,函数可以赋值给一个变量,而JS又是弱类型语言,所以在JS中函数就可以作为参数或者是返回值(这一点就是蛮好玩的)。OK,了解了上面,我们就来看一下什么是闭包?定义:函数嵌套函数,并且内层函数作为返回值,引用外部函数的参数或变量。乍一看似乎不好理解,emmm,我们就通过例子来一步步理解闭包的概念。例子一function f1

2020-10-19 08:56:46

JAVA递归解决迷宫问题(详解)

如果说到递归思想,首先想到的肯定是一些比较常见的问题,什么阶乘,最大公约数,等等。而这些也是比较简单很容易理解的。而这一篇文章讲的问题是关于迷宫的一个小问题。我们用二维数组来模拟一个迷宫:“1”就是代表城墙的意思,右下角的“0”是终点位置,给一个起点位置,如果在不穿过城墙的情况下可以到达终点,那么就说这个起点位置是正确的。很简单的一个游戏,如果我们用代码来找这么一条路的话应该怎么实现呢?如果我们从红色的这个开始走,我们要用什么样的思路来实现呢。我们可以规定一个步骤:1.判断下面是否可以走

2020-10-06 19:06:20

JAVA用栈计算后缀表达式(详解)

在上一篇我们已经说过如何计算中缀表达式了,那么这一篇就来说一下如何来计算后缀表达式的值。后缀表达式呢,要比中缀表达式的计算要容易得多。和上一次一样,我们先来分析一下过程应该是什么样子呢?我这里有一个后缀表达式,一个栈,还有分析过程,我们就拿这个表达式来做一下演示。我们从左到右扫描,34都是数字直接入栈。然后遇到运算符+,我们弹出栈的两个数并运算,结果入栈。然后下一个是5,直接入栈。再下个是*,依旧弹出两个数,进行运算。结果入栈然后下个是6,我们直接入栈。然后是 - ,我们依旧弹出

2020-09-30 11:53:51

JAVA用栈计算中缀表达式(详解)

那,在上一篇呢,已经写好了如何去实现一个栈了。在最开始我就说过,栈的实现很简单,但用栈来解决一些实际问题,可能会有点难度。今天这一篇就是用栈这个数据结构,来解决中缀表达式的计算。也就是数学表达式的计算。题目也很简单:假如有个字符串表达式(“5+2*5-4/1”),用栈来计算这个表达式的值。OKK,现在我们来分析一下怎么来做。然后再用代码实现。那,这是我整理好的思路,似乎第一眼看到后,很懵逼。没有关系,我们用一个例子来分析一下,瞬间就会明了。就用上面我提到过的表达式(5+2*5-4/1)。

2020-09-27 16:17:13

JAVA用数组实现栈(详解)

关于栈是什么,这里是真的不多说了,不管学什么语言,只要涉及到数据结构,一定在开始就有栈这个概念。而我们所熟知的也就是先进后出。但也是这个先进后出最能体现出栈的特点。总得来说呢,栈的实现并不难,但是很多算法和功能实现都需要用到栈,所以栈这个数据结构也变得至关重要,所以这一篇,我们就说一下怎么用数组实现一个栈。我们先从原理下手, 想一想一个栈我应该怎么实现出来?看图,如果我有一个数组arr为空,并且有一个变量top,让他初始值为-1;每次添加元素,我们就让top++,并且把值给arr[ top ],

2020-09-24 22:33:25

JAVA用环形链表解决约瑟夫问题(详解)

那如果想解决约瑟夫问题,那我们就再来回顾一下约瑟夫问题:约瑟夫问题是个有名的问题:N个人围成一圈,从某一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。那这句话的意思是什么呢,要怎么理解呢?我们用图来看一下:看一看到五个圆围成了一个圈,每个圆有自己的编号。假设我们从1号开始报数,每次报数后的第二个会被杀掉。那么第一个出局的应该是2号。这个时候再从第三个开始报数,然后第4号淘汰。然后再从第四号开始报数,以此类推。。。。最后确定出一个淘汰的顺序。OK。原理我们已经知道了,那

2020-09-23 14:46:12

JAVA实现环形链表(详解)

关于单链表和双向链表,在之前的LinkedList源码里我已经写过一次了。。。所以这次关于链表的分析就只剩环形链表了而这一篇,主要是讲解原理以及代码实现,不涉及到解决问题。所以接下来的重点主要在于如何用代码来实现出一个环形链表。所谓环形链表也就是在单链表的基础上,让最后一个节点的next指向第一个节点,所以说这次我们就不能设置头节点了(不然最后一个节点会指向一个没用的节点)。。那我们就开始写第一步,也就是最开始的一步,创建一个节点类。public class Node { private

2020-09-22 22:50:10

JAVA数组实现环形队列(下篇)

关于上一篇文章,测试了代码发现所实现的队列只能使用一次。、是一个问题很大的数据结构。所以为了能够让队列变得优化,对上一篇的代码进行了修改。关于上一篇队列的实现,只能使用一次的原因也说过了。这里再简单说一下:如果我们在队列里面添加满元素后:rear指向最后一个数组元素的位置。这个时候队列满了。然后我们再出队出队一直出。即便最后一个元素也出队了,但是里面的元素并没有删除,只是front++到了rear的位置,因为二者相等,所以起到了一个队列为空的效果。但也正是因为这样。我们这个队列才只能

2020-09-12 21:24:41

JAVA数组实现队列(上篇)

这一篇,说一下怎么用JAVA实现一个队列,那我们就要知道什么是队列,队列是一种比较简单的数据结构,我们来看一下队列的定义:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。也就是我们经常所说的**“先进先出”**。那如果我们用数组实现一个队列,我所学过的语言实现的方法似乎都大致一样。首先我们创建一个数组是一定的,大小可以由用户来确定。然

2020-09-11 15:59:38

JAVA中的二维数组和稀疏数组之间的转换

由于是开学季,也确实是好久没有更新博客了,主要也是因为自己一直在学新东西,之前的没啥好分享的了。今天开始主要就是更新JAVA中的数据结构,第一篇就是关于稀疏数组的转换问题。说到稀疏数组,首先要知道稀疏数组是什么?我在网上找到了一张图。我们来看左边,是一个正常的二维数组,但是这个二维数组的大部分元素都是0.似乎有些浪费空间,我们有没有一种方法能够简化这种二维数组。这个时候稀疏数组出现了,让我们看一下右边的数组。我们记住,稀疏数组的列数一定是3,分别代表行列值。而且稀疏数组的第一行数据代表的是

2020-09-09 11:59:35

JQuery实现表格内容过滤(附代码)

效果显示:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> th

2020-08-15 13:48:18

JQuery实现单行变色表格(附代码)

效果展示:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> th {

2020-08-15 13:27:44

JQuery实现一个提交框(附代码)

效果显示:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * {

2020-08-14 18:36:54

JQuery实现轮播图(附代码)

之前有写过一篇用原生dom写的轮播图实现代码:宝贝点进来吧,有你想要的而这次用JQuery写的,还是用之前的html结构和css样式,只是改变了js的代码部分。所以这次就把用JQuery写的js代码写下来。。。。。代码: <script src="./jquery-3.5.1.min.js"></script> <script> var currentIndex = 0; var timer; //图片滑动

2020-08-14 14:11:48

JQuery实现选项卡( 附代码)

样式:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * {

2020-08-14 10:37:20

DOM经典例子(轮播图)

效果显示:功能:1、每两秒自动换页;2、可以进行1,2,。。翻页;3、可以通过>或者<进行翻页;图片资源:代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <

2020-08-12 20:22:11

查看更多

勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv3
    阅读者勋章Lv3
    授予在CSDN APP累计阅读博文达到30天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 原力探索 · S
    原力探索 · S
    在《原力计划【第二季】》打卡挑战活动中,发布 12 篇原创文章参与活动的博主,即可获得此勋章。(本次活动结束后统一统计发放)