
javascript
javascript
鲨鱼辣椒面丶
这个作者很懒,什么都没留下…
展开
-
js中事件冒泡和事件委托(事件代理)
事件冒泡:子节点一层层冒泡到根节点优点:减少代码量,只为子元素添加方法就可以缺点:方法直接作用于父元素上取消事件冒泡方法W3C:e.stopPropagation()IE:e.cancelBubble=true事件委托(事件代理):利用冒泡的原理 把加事件加到父级上,触发执行效果优点:新添加的元素还会有之前的事件(动态绑定事件)...原创 2021-08-08 21:56:24 · 211 阅读 · 0 评论 -
js中重要api封装
用ES5实现数组的map方法核心要点:1)回调函数的参数有哪些,返回值如何处理。2)不修改原来的数组。Array.prototype.MyMap = function(fn, context){ var arr = Array.prototype.slice.call(this); //由于是ES5所以就不用...展开符了 var mappedArr = []; for (var i = 0; i < arr.length; i++ ){ mappedArr.pu原创 2021-08-08 21:43:08 · 386 阅读 · 0 评论 -
async/await的运行机制
async/await被称为 JS 中异步终极解决方案。asyncMDN 的定义: async 是一个通过异步执行并隐式返回 Promise 作为结果的函数。返回结果为Promise。async function func() { return 100;}console.log(func()); // Promise {<resolved>: 100}awaitasync function test() { console.log(100) let x =原创 2021-08-08 21:35:44 · 375 阅读 · 0 评论 -
JS异步编程有哪些方案?
回调函数fs.readFile('xxx', (err, data) => {});PromisereadFilePromise('1.json').then(data => { return readFilePromise('2.json')}).then(data => { return readFilePromise('3.json')}).then(data => { return readFilePromise('4.json')}原创 2021-08-08 21:26:25 · 103 阅读 · 0 评论 -
EventLoop
console.log('start');setTimeout(() => { console.log('timeout');});Promise.resolve().then(() => { console.log('resolve');});console.log('end');分析一下:1)刚开始整个脚本作为一个宏任务来执行,因此先打印start和end2)setTimeout 作为一个宏任务放入宏任务队列3)Promise.then作为一个为微任务放入到微原创 2021-08-08 21:20:13 · 151 阅读 · 0 评论 -
js中宏任务和微任务
在 JS 中,大部分的任务都是在主线程上执行,常见的任务有:1)渲染事件2)用户交互事件3)js脚本执行4)网络请求、文件读写完成事件等等。普通任务队列和延迟队列中的任务,都属于宏任务。对于每个宏任务而言,其内部都有一个微任务队列。1)将异步回调进行宏任务队列的入队操作。2)将异步回调放到当前宏任务的末尾。常见的微任务有MutationObserver、Promise.then(或.reject) 以及以 Promise 为基础开发的其他技术(比如fetch API)这便是宏任务和微任务原创 2021-08-08 21:17:31 · 396 阅读 · 0 评论 -
js中数据是如何存储的?
基本数据类型用栈存储,引用数据类型用堆存储。看起来没有错误,但实际上是有问题的。可以考虑一下闭包的情况,如果变量存在栈中,那函数调用完栈顶空间销毁,闭包变量不就没了吗?注:闭包变量是存在堆内存中的。具体而言,以下数据类型存储在栈中:booleannullundefinednumberstringsymbolbigint而所有的对象数据类型存放在堆中。...原创 2021-08-08 21:13:29 · 338 阅读 · 0 评论 -
JS中浅拷贝和深拷贝
重要: 什么是拷贝?首先来直观的感受一下什么是拷贝。let arr = [1, 2, 3];let newArr = arr;newArr[0] = 100;console.log(arr);//[100, 2, 3]这是直接赋值的情况,不涉及任何拷贝。当改变newArr的时候,由于是同一个引用,arr指向的值也跟着改变。现在进行浅拷贝:let arr = [1, 2, 3];let newArr = arr.slice();newArr[0] = 100;console.log原创 2021-08-08 21:10:54 · 89 阅读 · 0 评论 -
JS中this的理解
其实JS中的this是一个非常简单的东西,只需要理解它的执行规则就OK。在这里不想像其他博客一样展示太多的代码例子弄得天花乱坠, 反而不易理解。call/apply/bind可以显式绑定, 这里就不说了。主要这些场隐式绑定的场景讨论:1)全局上下文2)直接调用函数3)对象.方法的形式调用4)DOM事件绑定(特殊)5)new构造函数绑定6)箭头函数全局上下文全局上下文默认this指向window, 严格模式下指向undefined。直接调用函数比如:let obj = { a: fu原创 2021-08-08 21:05:29 · 211 阅读 · 0 评论 -
JS中flat---数组扁平化
对于前端项目开发过程中,偶尔会出现层叠数据结构的数组,我们需要将多层级数组转化为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合并且展开。那么该如何去实现呢?需求:多维数组=>一维数组let ary = [1, [2, [3, [4, 5]]], 6];// -> [1, 2, 3, 4, 5, 6]let str = JSON.stringify(ary);调用ES6中的flat方法ary = ary.flat(Infinity);replace + split原创 2021-08-03 18:33:35 · 206 阅读 · 0 评论 -
什么是闭包
首先要明白作用域链的概念,其实很简单,在ES5中只存在两种作用域————全局作用域和函数作用域,当访问一个变量时,解释器会首先在当前作用域查找标示符,如果没有找到,就去父作用域找,直到找到该变量的标示符或者不在父作用域中,这就是作用域链,值得注意的是,每一个子函数都会拷贝上级的作用域,形成一个作用域的链条。 比如:var a = 1;function f1() { var a = 2 function f2() { var a = 3; console.log(a);//3 }}原创 2021-08-03 18:29:08 · 200 阅读 · 0 评论 -
如何让if(a == 1 && a == 2)条件成立?
var a = { value: 0, valueOf: function() { this.value++; return this.value; }};console.log(a == 1 && a == 2);//true原创 2021-08-03 18:26:19 · 398 阅读 · 0 评论 -
typeof 是否能正确判断类型?以及和instanceof的区别
对于原始类型来说,除了 null 都可以调用typeof显示正确的类型。typeof 1 // 'number'typeof '1' // 'string'typeof undefined // 'undefined'typeof true // 'boolean'typeof Symbol() // 'symbol'但对于引用数据类型,除了函数之外,都会显示"object"。typeof [] // 'object'typeof {} // 'object'typeof console原创 2021-08-03 18:20:20 · 267 阅读 · 0 评论 -
javascript中 null是对象吗?
结论: null不是对象。解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。...原创 2021-08-03 18:08:26 · 357 阅读 · 0 评论 -
javascript的基本数据类型
在 JS 中,存在着 7 种原始值,分别是:booleannullundefinednumberstringsymbolbigintSymbol 为es6引入意义为 独一无二的值bigint 可以表示任意大的整数原创 2021-08-03 18:06:40 · 148 阅读 · 0 评论 -
前端常用算法
1,时间复杂度通常使用最差的时间复杂度来衡量一个算法的好坏。常数时间 O(1) 代表这个操作和数据量没关系,是一个固定时间的操作,比如说四则运算。对于一个算法来说,可能会计算出如下操作次数 aN + 1,N 代表数据量。那么该算法的时间复杂度就是 O(N)。因为我们在计算时间复杂度的时候,数据量通常是非常大的,这时候低阶项和常数项可以忽略不计。当然可能会出现两个算法都是 O(N) 的时间复杂度,那么对比两个算法的好坏就要通过对比低阶项和常数项了。2,位运算位运算在算法中很有用,速度可以比四则运算快很多原创 2021-07-28 23:35:01 · 3500 阅读 · 0 评论