
JS基础
文章平均质量分 94
JS基础
夜神灬丶
学习时的痛苦是暂时的,未学到的痛苦是终生的。
展开
-
浏览器垃圾回收机制与性能提升
这里写目录标题一. 为什么浏览器需要垃圾回收?JavaScript 的内存空间栈空间和堆空间二. 浏览器垃圾回收机制1. 标记清除2. 引用计数三. 浏览器内存泄漏四. 检测浏览器性能1.Performance 性能检测2.Lighthouse(Audits) 面板五. 如何提高浏览器性能一. 为什么浏览器需要垃圾回收?JavaScript 的内存空间在 JavaScript 的执行过程中, 主要有三种类型内存空间,分别是 代码空间 、 栈空间 和 堆空间 。其中代码空间主要存储可执行代码。栈空间原创 2021-06-23 18:46:01 · 1426 阅读 · 0 评论 -
谈谈Js中的Web Worker
1.什么是web Worker?JavaScript是单线程模型,即所有任务只能在同一个线程上面完成,前面的任务没有做完,后面的就只能等待,这样当我们执行一些时间较长的js运算时候呢就会阻塞后面执行的代码。有什么办法能解决这一问题呢?web worker 就是专门解决这一问题。Web Worker是一种网络接口,这意味着它无法访问或管理文档对象模型。Worker存在于一个不同的线程中,它和主线程互不干扰。它在一个新的Worker对象创建时接受信息,然后向worker发送信息。2.web worker原创 2021-06-06 13:13:58 · 8557 阅读 · 0 评论 -
Js实现一个sleep函数
话不多说直接上代码!!function sleep(delay) { var start = (new Date()).getTime(); while ((new Date()).getTime() - start < delay) { continue; }}function test() { console.log('111'); sleep(2000); console.log('222');}test()这种实现方式是利用一个伪死循环阻塞主线原创 2020-09-19 21:21:08 · 743 阅读 · 0 评论 -
Js归并排序(算法)
目的:掌握 归并排序 的 基本思想与过程、代码实现、时间复杂度1、基本思想与过程:先递归的分解数列,再合并数列(分治思想的典型应用)(1)将一个数组拆成A、B两个小组,两个小组继续拆,直到每个小组只有一个元素为止。(2)按照拆分过程逐步合并小组,由于各小组初始只有一个元素,可以看做小组内部是有序的,合并小组可以被看做是合并两个有序数组的过程。(3)对左右两个小数列重复第二步,直至各区间只有1个数。下面对数组【42,20,17,13,28,14,23,15】进行归并排序,模拟排序过程如下:第一步:原创 2020-09-06 15:07:52 · 797 阅读 · 0 评论 -
Js完整实现二叉搜索树(BST)
完整实现一个二叉搜索树(BST)1. 二叉搜索树(BST)介绍:二叉树就是最多有两个子节点,一个是左侧子节点,一个是右侧子节点。这个定义有助于我们写出更高效地在树中插入,查找和删除节点的算法。二叉搜索树(BST)是二叉树的一种,但是只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。2. 二叉搜索树所具备的一些功能insert(key): 向树中插入一个新的键search(key): 在树中查找一个键,如果节点存在,则返回节点;如果不存在则返回false。insert(原创 2020-09-05 23:58:38 · 1465 阅读 · 1 评论 -
Js -- 函数柯里化(面试题)
首先看看柯里化到底是什么?维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。作者:flowsands链接:https://www.jianshu.com/p/2975c25e4d71来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。废话不多说!!直接上面试题1.实现一个函数功能:sum(1,2,3,4…n)转化为原创 2020-09-02 22:35:15 · 3341 阅读 · 1 评论 -
js实现--动态规划算法
动态规划的思想它的思想就是把一个大的问题进行拆分,细分成一个个小的子问题,且能够从这些小的子问题的解当中推导出原问题的解。同时还需要满足以下两个重要性质才能进行动态规划最优子结构性: 既所拆分的子问题的解是最优解。子问题重叠性质: 既在求解的过程当中,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的解题效率转载 2020-09-02 21:34:34 · 391 阅读 · 0 评论 -
Js -- 最长公共子串(算法)
先比较s1、s2的长度,如果是s1比s2长则交换位置取较短的字符串作为。substr(idex, len),所以拿较短的串取其子串,然后判断它是否在较长的字符串中存在,如果存中则直接返回,否则再取下一位。const findSubStr = (str1, str2) => { if (str1.length > str2.length) { [str1, str2] = [str2, str1] } let result = ""; const len = str1.l原创 2020-08-31 21:53:27 · 2749 阅读 · 1 评论 -
Js快速排序(算法)
Js快速排序(算法)思路:1、选择数组中间数作为基数,并从数组中取出此基数;2、准备两个数组容器,遍历数组,逐个与基数比对,较小的放左边容器,较大的放右边容器;3、递归处理两个容器的元素,并将处理后的数据与基数按大小合并成一个数组,返回。const arr = [35,23,184,67,19,96,123];const quickSort = (arr) => { if (arr.length < 2) return arr; let middleIndex = Math.原创 2020-08-30 22:14:14 · 347 阅读 · 0 评论 -
Js 二分查找和冒泡排序(算法)
1. 冒泡排序冒泡排序就是每次两两比较如果前者比后者大则交换位置,反之则不动// 冒泡排序let arr = []; // 首先随机生成一个长度为100的0~100的数组for(let i = 0; i< 100; i++) { arr.push(Math.floor(Math.random() * 101))}const bubbleSort = (arr) => { let isSort = true; arr = [...arr]; for(let i = 0原创 2020-08-29 22:18:18 · 289 阅读 · 0 评论 -
Js 中的各种错误类型
1.SyntaxError(语法错误)解析代码时发生的语法错误eg:var 1a;Uncaught SyntaxError: Unexpected number2.ReferenceError(引用错误)a.引用了一个不存在的变量eg: console.log(a);Uncaught ReferenceError: a is not definedb.将变量赋值给一个无法被赋值的对象eg:console.log()= 1;Uncaught ReferenceError: Invalid原创 2020-08-29 20:47:11 · 340 阅读 · 0 评论 -
JS 基础--- proxy(代理)
JS Proxy1.概述Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。2.语法let p = new Proxy(target, handler);3.参数原创 2020-08-29 09:33:47 · 2335 阅读 · 0 评论 -
如何解决js定时器不准确问题
如何解决js定时器不准确问题为什么会出现定时器不准确呢?这个其实就得提到js执行机制了,叫做事件循环Eventloop 循环机制中,异步事件 setInterval 到时后会把回调函数放入消息队列中Event Queue,主线程的宏任务执行完毕后依次执行消息队列的微任务,等微任务执行完了在循环回来执行宏任务。并且由于消息队列中存在大量任务,其他任务执行时间就会造成定时器回调函数的延迟,如果不处理则会一直叠加延迟解决方案其实要解决这个也很简单通过计算时差可以有效的解决const _setInter原创 2020-08-26 18:14:10 · 2827 阅读 · 0 评论 -
JS如何实现异步调度器(面试题)
js实现异步任务调度器这是一个大厂面试题如下图,就不做过多阐述了其代码实现:class Scheduler { constructor(maxNum) { this.taskList = []; this.count = 0; this.maxNum = maxNum; } async add(promiseCreator) { if (this.count >= this.maxNum) { await new Promise((res原创 2020-08-26 18:00:09 · 2643 阅读 · 6 评论 -
微信小程序实现watch监听,无需页面引入!!!
目录1监听函数实现2.页面Page重写(实现无需引入)3完整代码实现4微信小程序代码片段大家都知道小程序其实和Vue的写法以及原理都存在很大的相同,但是里有watch监听可以监听data定义的数据,而小程序里并没有(其实小程序并不需要哈哈,大家可以想想。但是作为程序员总想凭什么没有!)。**其实监听器的原理,就是将data中需监听的属性写在watch对象中,并给其提供一个方法,当被监听属性的值...原创 2020-05-01 11:46:27 · 4192 阅读 · 5 评论 -
JS单页面路由的实现
JS单页面路由的实现对于页面路由的实现是每个项目都必须做到的一点,在之前很多都是服务端渲染好返回html页面给浏览器,这样就不用前端去操作了,与此同时在html页面上也可以嵌套后端语言。这种也称为前后端不分离混合开发。但是服务器端压力越来越大。而且有一个最大的弊端就是路由的调转需要刷新页面,那么响应时间也就增长了。后来ajax异步刷新的出现使得前端也可以对url进行管理,此时,前端路由就出现了,...原创 2020-02-03 17:51:59 · 829 阅读 · 0 评论 -
JS中的for循环总结
JS 最常用的几种循环1. for 循环,最原始的循环2.do-while循环3.while循环原创 2020-01-09 22:38:55 · 1055 阅读 · 0 评论