自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (5)
  • 收藏
  • 关注

转载 JS 实现函数链式调用

let index = 0 let stack = [] function next(){ let fn = stack[index] index++ if(typeof fn === 'function') { fn() } } function T(name) { stack.push(function() { console.log('Hi! This is' + name) next() }) .

2021-08-30 18:17:20 939

转载 js 深拷贝函数

// 定义一个深拷贝函数 接收目标target参数function deepClone(target) { // 定义一个变量 let result; // 如果当前需要深拷贝的是一个对象的话 if (typeof target === 'object') { // 如果是一个数组的话 if (Array.isArray(target)) { result = []; // 将result赋值为一个数组,并且执行遍历 .

2021-08-25 15:33:07 738

转载 js实现二叉树的先序、中序、后序遍历,递归和非递归方法

//递归实现function TreeNode(x){ this.val=val; this.left=null; this.right=null;}// 递归方法function threeOrders(root){ let preArray=[],middleArray=[],lastArray=[]; //先序遍历:根、左、右 function preOrder(root){ if(root){ preA.

2021-08-24 23:14:01 338

转载 js 求二叉树的深度

const root = { val: 4, left: { val: 2, left: { val: 1 }, right: { val: 3 } }, right: { val: 5, right: { val: 6, right: {.

2021-08-24 21:59:28 305

转载 JavaScript 实现多叉树的遍历

/** * 用于演示的 JSON 树形数据结构 */var root = { name:'D盘', children:[ { name:'学习', children:[ { name:'电子书', children:[ { name:'文学', children:[ { .

2021-08-22 15:20:43 588

转载 js 自己实现Promise

function Promise(exector) { var _this = this this.status = 'pending' this.value = undefined this.resolveList = [] this.rejectList = [] try { exector(resolve, reject) }catch(e) { reject(e) } function resolve(value) { if(_thi.

2021-05-21 18:29:16 128

转载 js 实现二叉树翻转

思路:如果根节点不为空,那么将左右子结点交换,然后将左右子结点进行递归调用。function invertTree(root) { debugger if (root !== null) { var temp = root.left; root.left = root.right; root.right = temp; invertTree(root.left); invertTree(root.right); } return root...

2021-05-21 17:35:04 504

转载 十大经典排序算法

0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 .

2021-04-09 14:20:52 83

转载 快速排序 js

快速排序的3个基本步骤:从数组中选择一个元素作为基准点 排序数组,所有比基准值小的元素摆放在左边,而大于基准值的摆放在右边。每次分割结束以后基准值会插入到中间去。 最后利用递归,将摆放在左边的数组和右边的数组在进行一次上述的1和2操作。var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var

2021-03-28 22:01:30 49

原创 js面试 代码片段

var x=1,y=0,z=0;var add=function(x){ return x = x+1;}y=add(x);function add(x){ return x=x+3;}z = add(x);console.log(x,y,z);//输出1,2,2 原因:通过var声明的函数的引用不会被后面的函数改变var num=1;var myObject ={ num :2, add:function(){ this...

2021-03-28 16:59:09 197

原创 js 使用new来创建对象的过程

js 使用new来创建对象的过程

2021-03-23 22:41:18 339

转载 js实现call,apply,bind

第一步我们先在Function的原型上面新建一个函数吧.叫myApplyconst obj = { name:'joy',};function getName() { console.log(this.name);}Function.prototype.newApply= function () { console.log(this);};getName.newApply(); //ƒ getName(){ console.log(this.name); .

2021-03-22 23:14:38 93

转载 找出给定数组的所有子集

1、题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。任何一个集合都是它本身的子集空集是任何集合的子集2、解题思路1、采用二进制的思路,全0对应空集,全1对应全集2、根据数组长度决定二进制位数3、遍历二进制各值,使用按位与操作符,生成数组的子集3、解题代码/*** @param {number[]} nums* @return {number[][]}*/var subsets = function(n...

2021-03-16 23:00:06 760

转载 二维数组的排列组合 js

给定任意二维数组,输出所有的排列组合项。 比如 [['A','B'], ['a','b'], [1, 2]],输出 ['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2']const getResult = (arrA, arrB) => { if (!Array.isArray(arrA) || !Array.isArray(arrB)) { return } if (arrA.length === 0) { return a...

2021-03-15 22:44:59 771

转载 promise.all的实现 es6

|Promise.all(iterable)方法返回一个 [Promise],此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果。特点: 返回值将会按照参数内的 promise 顺序排列,而不是由调用 promise 的完成顺序决定。 有一个出错,就被认定为失.

2021-03-13 18:24:19 440

转载 js 模拟浏览器的并行请求限制

// 实现一个createRequest方法(假设浏览器允许无限多的并行请求),调用形式如下图,最后实现效果如图:// ====>// =====>// =======>// =====>// ======>// =====>// ====>// ====>...

2020-08-13 17:11:23 1141

原创 js 求数组中出现最多的项以及次数 (数组同时包含数字和字符串)

传统写法:vararr=[1,'1',2,2,'1',1,1];varlen=arr.length;varresult=[];varmax=0;varcurIndex=0;for(vari=0;i<len;i++){for(varj=0;j<len;j++){if(arr[i]===arr[j]){if(!result[i])...

2020-08-10 14:09:43 405

原创 js 求最大连续字符

varstr="aacccddddddddddssssdaaaaaaaaaaaaaaaaaaaaaaaaa";varnum=1;varmaxNum=0;varindex=0;for(vari=0;i<str.length-1;i++){vara=str.substring(i,i+1);varb=str.substring(i+1,i+2);if(a==b){...

2020-07-23 14:23:05 298

原创 数字实现千位分隔符

function parseToMoney(num) { num = parseFloat(num.toFixed(3)); let [integer, decimal] = String.prototype.split.call(num, '.'); integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&,'); return integer + '.' + (decimal ? decimal : '');}或者function ...

2020-06-19 18:31:40 854

转载 模拟 instanceof Object.create

// 模拟 instanceoffunction instance_of(L, R) { //L 表示左表达式,R 表示右表达式 var O = R.prototype; // 取 R 的显示原型 L = L.__proto__; // 取 L 的隐式原型 while (true) { if (L === null) return false; if (O === L) // 这里重点:当 O 严格等于 L 时,返回 true return true...

2020-06-16 10:17:42 152

转载 js 防抖和节流

防抖函数原理:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。// 防抖函数const debounce = (fn, delay) => { let timer = null; return (...args) => { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, args); }, delay); };};节流函数原理:规定在一个单...

2020-06-16 10:14:22 145

转载 js apply 、 call 、bind

apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;apply 、 call 、bind 三者都可以利用后续参数传参;bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。多次 bind() 是无效的...

2020-06-15 10:30:19 121

转载 js 组合和管道

function compose() { var fns = [].slice.call(arguments) return function (initialArg) { var res = initialArg for (var i = fns.length - 1; i > -1; i--) { res = fns[i](res) } return res }}function ...

2020-06-15 10:19:38 685

原创 js/ts 常见的判断

typeof NaN;//numbertypeof undefined;//undefinedtypeof null;//objecttypeof [];//objecttypeof eval;//functiontypeof(instanceof) //Syntax errorclass Point {}typeof Point//"function"null instanceof Object//falsevar a=[,,];a.length//2var a=[,,3];a..

2020-06-15 10:18:13 1557

原创 常见js/ts面试题

var a=1;var b=(a++)+a;alert(b);//b=3var a=1;var b=(++a)+a;alert(b);//b=41+{}//"1[object Object]"2+null//22+undefined//NaN"0"==false//trueisNaN(true);//falseisNaN(undefined);//trueisNaN(0/0);//trueisNaN(NaN);//trueNaN!=NaN;//true[]!=[]//tru

2020-06-12 15:30:58 2757

原创 柯里化函数及应用

// ES6版的柯里化函数function curry(fn) { const g = (...allArgs) => allArgs.length >= fn.length ? fn(...allArgs) : (...args) => g(...allArgs, ...args) return g;}// ES5版的柯里化函数function currying(fn) { var len = fn.length; ...

2020-06-12 15:14:57 215

原创 求出最优子集

//functionmaxSum(arr=[]){//lettempSum=0;//letmaxSum=0;//for(leti=0;i<arr.length;i++){//tempSum+=arr[i];//if(tempSum>maxSum){//maxSum=tempSum;//}elseif(tempSu...

2020-06-12 15:11:19 340

原创 nodejs多行输入输出规范示例

nodejs 多行输入输出规范示例

2023-02-27 16:29:21 707

转载 浏览器内核、渲染引擎和js引擎的关系

浏览器内核又可以分成两部分:渲染引擎(layout engineer或者RenderingEngine)和JS引擎。渲染引擎功能作用渲染引擎,负责对网页语法的解释(如HTML、JavaScript)并渲染网页。所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果...

2021-09-03 14:52:12 621

原创 js 自己实现字符串的数学运算

const nums = []let input = '3+20*1/4*2-2'const operate1 = ['*', '/']const operate2 = ['+', '-']const calc1 = (str) => { let result = 0 let n = 0 for (let i = 0; i < str.length; i++) { const element = str[i]; if (oper..

2021-09-02 14:57:28 1573 1

转载 VO、AO、执行环境和作用域链

1、变量对象(variable object)原文:Every execution context has associated with it a variable object. Variables and functions declared in the source text are added as properties of the variable object. For function code, parameters are added as properties of the

2021-09-01 21:24:08 807

原创 js 判断对象是否通过new创建

//方式1function Person(n,a){ this.name = n; this.age = a; if(this instanceof Person){ alert('new调用'); }else{ alert('函数调用'); }}var p = new Person('jack',30); // --> new调用Person(); // --> 函数调用//方式2function P.

2021-08-30 21:13:48 835

转载 js 实现sleep函数

async function test() { for (var i = 0; i < 10; i++) { await sleep(1000); console.log(i); }} function sleep(delay) { return new Promise((resolve, reject) => { setTimeout(() => { try { .

2021-08-30 18:12:02 348

转载 js 箭头函数和普通函数的区别

箭头函数和普通函数的区别一.外形不同:箭头函数使用箭头定义,普通函数中没有代码实例如下:// 普通函数function func(){ // code}// 箭头函数let func=()=>{ // code}二.箭头函数都是匿名函数普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。代码实例如下:// 具名函数function func(){ // code}// 匿名函数let func=function(){ // co...

2021-08-25 15:20:16 448

转载 js 四种继承方式

继承说到继承,最容易想到的是ES6的extends,当然如果只回答这个肯定不合格,我们要从函数和原型链的角度上实现继承,下面我们一步步地、递进地实现一个合格的继承实现一个方法可以从而实现对父类的属性和方法的继承,解决代码冗余重复的问题一. 原型链继承原型链继承的原理很简单,直接让子类的原型对象指向父类实例,Child.prototype=new Parent()1当子类实例找不到对应的属性和方法时,就会往它的原型对象,也就是父类实例上找,从而实现对父类的属性和方法的继承原型继

2021-08-23 15:56:13 137

转载 js正则匹配方法:match和exec

match是字符串方法,写法为:str.match(reg)  exec是正则表达式方法,写法为:reg.exec(str)  match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null,故在没有深入了解两者的使用规则前,会误以为两者的使用效果是一样的,下面在几种情况中对match和exec进行区分。1、全局匹配:  当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果:var s = "aaa bbb ccc";var reg = /\b

2021-08-22 15:35:04 1792

转载 React16版本新增生命周期getDerivedStateFromProps替代componentWillReceiveProps的原因

一直使用componentWillReceiveProps来进行当props发生变化时更新state,重新渲染。但是使用react16.3及以上版本时,提示componentWillReceiveProps将在17版本时被废弃。可以使用getDerivedStateFromProps来进行替代。于是研究了一下如何用getDerivedStateFromProps替代componentWillReceiveProps。1 含义getDerivedStateFromProps生命周期的意思就是从props

2021-08-20 18:06:37 889

转载 react中super()的理解

es6 class(类) 方法创建组件1 // 构造函数 会 默认生成 一个原型对象2 function Person(name,) {3 this.name = name;4 }5 console.log(Person); // 构造函数本身6 console.log(Person.prototype) // 指向原型对象7 console.log(Pers

2021-08-20 17:41:04 1150

原创 js 暂时性死区的理解

当程序的控制流程在新的作用域(module function 或 block作用域)进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。TDZ(暂时性死区)是一个很重要的概念,在很多的面试环节都有可能问到该概念,其影响let、const、import、class、typeof等关键字的可用性,不容忽视;因此大家.

2021-08-20 17:20:02 294

转载 JS 语法有效性的判断

给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。/** * @param {string} s * @return {boolean} */var isValid = function(s) { if(s==" "||s==""){ return true; } let stac.

2021-08-19 16:41:57 842

20200103-王正正-js的执行顺序和闭包的探究.docx

20200103-王正正-js的执行顺序和闭包的探究.docx

2020-07-10

注释-jquery-2.0.3.js

注释-jquery-2.0.3.js

2020-07-10

proxyproxyproxy.html

proxyproxyproxy.html

2020-07-10

白鹭引擎-为H5而生.ppt

白鹭引擎-为H5而生

2020-07-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除