
前端 JS
.
宇六岁鸭
小憨包一枚
展开
-
【前端学习 - JS(21) 性能优化】
性能优化什么是性能优化,为什么要优化,我们优化的对象是什么,考虑清楚这几个问题,我们才能找到对应的解决办法。什么是性能优化?在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。简而言之,就是让我们的程序更快的运行。为什么要性能优化?让程序更好更快的运行,提升用户的体验和程序的效率我们优化的对象是什么?优化对象是程序,以及程序所运行在的载体(如浏览器)我们已经知道了性能优化的对象是什么了,那么接下来就可以根据优化对象分开几个大类总结,对于前端来.原创 2022-01-17 22:44:52 · 430 阅读 · 0 评论 -
【前端学习 - JS(20)js脚本加载问题,async、defer】
js脚本加载问题,async、defer1-1 正常模式这种情况下 JS 会阻塞浏览器,浏览器必须等待 index.js 加载和执行完毕才能去做其它事情。<script src="index.js"></script>1-2 async(异步) 模式async 模式下,JS 不会阻塞浏览器做任何其它的事情。它的加载是异步的,当它加载结束,JS 脚本会立即执行。<script async src="index.js"></script&g原创 2022-01-17 22:41:53 · 337 阅读 · 0 评论 -
【前端学习 - JS(19) new】
new构造调用:创造一个全新的对象 这个对象会被执行 [[Prototype]] 连接,将这个新对象的 [[Prototype]] 链接到这个构造函数.prototype 所指向的对象 这个新对象会绑定到函数调用的 this 如果函数没有返回其他对象,那么 new 表达式中的函数调用会自动返回这个新对象...原创 2022-01-17 22:39:55 · 439 阅读 · 0 评论 -
【前端学习 - JS(18)事件流】
事件流事件流是网页元素接收事件的顺序,"DOM2级事件"规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。首先发生的事件捕获,为截获事件提供机会。 然后是实际的目标接受事件。 最后一个阶段是时间冒泡阶段,可以在这个阶段对事件做出响应。虽然捕获阶段在规范中规定不允许响应事件,但是实际上还是会执行,所以有两次机会获取到目标对象。<!DOCTYPE html><html lang="en"><head> <meta ch.原创 2022-01-17 22:37:18 · 135 阅读 · 0 评论 -
【前端学习 - JS(17)ES6】
ES61-1 背景EC版本 发布时间 新增特性 2009(ES5) 2009年11月 扩展了Object、Array、Function的功能等新增特性 2015(ES6) 2015年6月 类,模块化,箭头函数,函数参数默认值等 2016(ES7) 2016年3月 includes,指数操作符 2017(ES8) 2017年6月 sync/await,Object.values(),Object.entries(),Stri.原创 2022-01-16 22:54:32 · 257 阅读 · 0 评论 -
【前端学习 - JS(16) 严格模式的优缺点】
严格模式的优缺点1-1 概念ECMAScript 5 中引入的一种将更好的错误检查引入代码中的方法, 现在已经被大多浏览器实现. 这种模式使得Javascript在更严格的条件下运行1-2 优点无法再意外创建全局变量。 会使引起静默失败(silently fail,即:不报错也没有任何效果)的赋值操抛出异常。 试图删除不可删除的属性时会抛出异常(之前这种操作不会产生任何效果)。 要求函数的参数名唯一。 全局作用域下,this的值为undefined。 捕获了一些常见的编码错误.原创 2022-01-16 22:40:33 · 536 阅读 · 0 评论 -
【前端学习 - JS(15)v8引擎】
v8引擎1-1 v8垃圾回收「背景:」V8的垃圾回收策略基于分代回收机制,该机制又基于 世代假说。该假说有两个特点:大部分新生对象倾向于早死; 不死的对象,会活得更久。基于这个理论,现代垃圾回收算法根据对象的存活时间将内存进行了分代,并对不同分代的内存采用不同的高效算法进行垃圾回收。「V8的内存分代」在V8中,将内存分为了新生代(new space)和老生代(old space)。它们特点如下:新生代:对象的存活时间较短。新生对象或只经过一次垃圾回收的对象。老生.原创 2022-01-16 22:39:07 · 348 阅读 · 0 评论 -
【前端学习 - JS(14)map】
mapmap和weakMap的区别map本质上就是键值对的集合,但是普通的Object中的键值对中的键只能是字符串。而ES6提供的Map数据结构类似于对象,但是它的键不限制范围,可以是任意类型,是一种更加完善的Hash结构。如果Map的键是一个原始数据类型,只要两个键严格相同,就视为是同一个键。实际上Map是一个数组,它的每一个数据也都是一个数组,其形式如下:const map = [ ["name","宇六岁"], ["age",6],]Map数据结构有.原创 2022-01-16 22:37:22 · 934 阅读 · 0 评论 -
【前端学习 - JS(13)对象】
对象1-1 如何判断一个对象是不是空对象1.将json对象转化为json字符串,再判断该字符串是否为"{}"var data = {};var b = (JSON.stringify(data) == "{}"); //true2.for in 循环判断var obj = {};var b = function() { for(var key in obj) { return false; } return true;}b().原创 2022-01-16 22:33:57 · 70 阅读 · 0 评论 -
【前端学习 - JS(12)数组】
数组1-1数组去重1. es6的new Setlet arr=[1,2,2,3]let arrNew=[...new Set(arr)]console.log(arrNew)//[1,2,3]2. 遍历旧数组往新数组中添加唯一的元素function unique(arr) { var newArr = [] for (var i = 0; i < arr.length; i++) { f (newArr.indexOf(arr[i])===-1).原创 2022-01-16 22:32:02 · 278 阅读 · 0 评论 -
【前端学习 - JS(11)深浅拷贝】
深浅拷贝1-1 浅克隆function shallowClone(obj) { let cloneObj = {}; for (let i in obj) { cloneObj[i] = obj[i]; } return cloneObj;}1-2 深克隆深克隆: 考虑基础类型 引用类型 RegExp、Date、函数 不是 JSON 安全的 会丢失 constructor,所有的构造函数都指向 Object原创 2022-01-16 22:28:50 · 139 阅读 · 0 评论 -
【前端学习 - JS(10) 原型和原型链】
原型和原型链1-1 背景:一个函数可以看成一个类,原型是所有类都有的一个属性,原型的作用就是给这个类的每一个对象都添加一个统一的方法1-2基本概念「prototype :」 每个函数都会有这个属性,这里强调,是函数,普通对象是没有这个属性的(这里为什么说普通对象呢,因为JS里面,一切皆为对象,所以这里的普通对象不包括函数对象)。它是构造函数的原型对象;「「proto」 :」 每个对象都有这个属性,这里强调,是对象,同样,因为函数也是对象,所以函数也有这个属性。它指向构造函数的原型对象;.原创 2022-01-16 22:27:11 · 78 阅读 · 0 评论 -
【前端学习 - JS(9)this】
1 this1-1 this的指向:ES5中:this 永远指向最后调用它的那个对象ES6箭头函数:箭头函数的 this 始终指向函数定义时的 this,而非执行时。1-2 怎么改变this的指向:使用 ES6 的箭头函数 在函数内部使用 _this = this 使用 apply、call、bind new 实例化一个对象案例1:var name = "windowsName"; var a = { name : "Cherr",原创 2022-01-16 22:24:43 · 76 阅读 · 0 评论 -
【前端学习 - JS(8) 闭包】
闭包「概念:」一个function里面return了一个子函数,子函数访问了父函数的变量。「应用场景:」函数防抖 封装私有变量 解决for循环变量相互影响的问题目标:想要依次打印0-9for(var i = 0; i < 10; i++){ setTimeout(()=>console.log(i),0)}// 实际控制台输出了10遍10.用闭包解决for(var i = 0; i < 10; i++){ (function(a)原创 2022-01-16 22:21:12 · 100 阅读 · 0 评论 -
【前端学习 -JS(7)作用域】
作用域扩展:JavaScript是门动态语言,跟Java不一样,JavaScript可以随意定义全局变量和局部变量,每一个函数都是一个作用域,当函数执行时会优先查找当前作用域,然后逐级向上。JavaScript是静态作用域,在对变量进行查询时,变量值由函数定义时的位置决定,和执行时的所处的作用域无关。ES6已经有块级作用域了,而且用 let 和 const 定义的变量不会提升。概念:作用域:变量或者函数的有效作用范围作用域链:我们需要查找某个变量值,会先在当前作用域查找,如果找.原创 2022-01-09 23:17:39 · 110 阅读 · 0 评论 -
【前端学习 - JS(6)内存泄漏】
1 内存泄漏「概念:」 申请的内存没有及时回收掉,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果「内存泄漏发生的场景:」(1) 意外的全局变量function leaks(){ leak = 'xxxxxx';//leak 成为一个全局变量,不会被回收}(2) 遗忘的定时器setTimeout 和 setInterval 是由浏览器专门线程来维护它的生命周期,如果在某个页面使用了定时器,当销毁页面时,没有手动去释放清理这些定时器的话,那么这些定时器还是存原创 2022-01-09 23:14:05 · 89 阅读 · 0 评论 -
【前端学习 - JS (5)垃圾回收机制】
垃圾回收机制MDN上有说: 从2012年起,所有现代浏览器都使用了标记-清除垃圾回收算法。所有对于js垃圾回收算法的改进都是基于标记-清除算法的改进「什么是垃圾:」 一般来说,没有被引用的对象就是垃圾,就是要才清除的。但有个例外,如果几个对象相互引用形成一个环,但根访问不到他们,他们也是垃圾(引用计数法,无法清除他们)「垃圾回收的几种算法:」1-1引用计数法概念: 记录有多少“程序”在引用自己,当引用的数值为0时,就开始清除它。优势:可马上回收垃圾,当被引用数值为0时,对象.原创 2021-12-15 05:30:00 · 1705 阅读 · 0 评论 -
【前端学习 - JS (4)内存】
内存1-1 执行上下文当代码运行时,会产生一个对应的执行环境,在这个环境中,所有变量会被事先提出来(变量提升),有的直接赋值,有的为默认值 undefined,代码从上往下开始执行,就叫做执行上下文。「执行环境有三种」:1.全局环境:代码首先进入的环境 2.函数环境:函数被调用时执行的环境 3.eval函数「执行上下文特点:」1.单线程,在主进程上运行 2.同步执行,从上往下按顺序执行 3.全局上下文只有一个,浏览器关闭时会被弹出栈 4.函数的执行上下文没有数目限制 .原创 2021-12-15 00:18:49 · 1125 阅读 · 0 评论 -
【前端学习 - JS (3)js运算符】
js运算符:1-1 delete 运算符delete 运算符用来删除对象属性或者数组元素,如果删除成功或所删除的目标不存在,delete 将返回 true。 然而,并不是所有的属性都可删除:一些内置核心和客户端属性是不能删除的 通过 var 语句声明的变量不能删除 通过 function 语句定义的函数也是不能删除的。例如:var o = { x: 1, y: 2}; // 定义一个对象console.log(delete o.x); // true原创 2021-12-15 00:15:27 · 1012 阅读 · 0 评论 -
【前端学习 - JS (2)数据类型的分类】
数据类型的分类:1-1 基本类型:string(字符串)--原始类型 boolean(布尔值)--原始类型 number(数字)--原始类型 symbol(符号)--原始类型 null(空值) undefined(未定义) BigInt(BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值,精度在(2^53-1)范围内,BigInt(10) 值为:10n) ES2020新出的其中 Symbol 和 BigInt 是ES6 中新增的数据类型:Symbol 代表创.原创 2021-12-08 23:59:49 · 452 阅读 · 0 评论 -
【前端学习 - JS(1)声明】
1 声明1-1 「js函数声明三种方式:」(1) Function()构造器var f =new Function()复制代码(2) 函数声明function f (){ console.log(2);}复制代码(3) 函数表达式var f = function() { console.log(1); }复制代码1-2「js变量声明:」var声明的变量会挂载在window上,而let和const声明的变量不会 var声明变量存在变原创 2021-12-08 23:56:31 · 574 阅读 · 0 评论