
javascript
MING23333
这个作者很懒,什么都没留下…
展开
-
对象和数组的解构,rest操作符
1.数组的解构赋值let [a,b,c]=[1,2,3];let [foo,[[bar],baz]]=[1,[[2],3]];foo //1bar //2baz //3let [ , , third]=["foo","bar","baz"];thrid //"baz"let [x, , y]=[1,2,3];x//1y//3let[head, ...tail]=[1,2,3,4];head //1tail //[2,3,4]let[x,y, ...z]=['a'];x//'原创 2020-09-28 14:59:29 · 338 阅读 · 0 评论 -
块级作用域,模板字符串
1.let(1):let用来声明变量,其用法类似于var,但是其所声明的变量,只在let命令所在的代码块内有效(2):let所声明的变量不存在变量提升现象,即声明的变量一定要在声明后使用,否则报错。(3):暂时性死区只要块级作用域内存在let命令,其所声明的变量就“绑定”在这个区域,不再受外界影响var a=1;if(true){a='qwe';//ReferenceErrorlet a:}在上面代码中,a为全局变量var定义,但是在块级作用域中,将a以局部变量let定义,故而,在le原创 2020-09-27 16:08:19 · 229 阅读 · 0 评论 -
async/await
async用于申明一个function异步的await用于等待一个异步方法执行完成async优点1,内置执行器2,更好语义3,更广泛适用性带async关键字的函数,使得函数返回值必为promise对象1.await等的是右侧【表达式】结果,右侧表达式执行完后抛出2.宏任务与微任务宏任务是代码主线,遇到了setTimeout会创建一个宏任务遇到promise,then之类的微任务...原创 2019-09-01 14:37:22 · 237 阅读 · 0 评论 -
Promise对象
1.对象状态不受外界影响,Promise对象代表一个异步操作有三种状态pending(进行中)fulfilled(已成功)reject(已失败)then方法是定义在原型对象Promise.prototype上的等待态(pending);promise包装任务正在执行中;完成态(fulfilled),promise包装的异步任务执行了resolve函数拒绝态(rejected);pr...原创 2019-09-01 14:51:07 · 140 阅读 · 0 评论 -
立即执行函数
遇到该函数立即执行,只执行一次,执行完后。将函数立即释放。用处:减少缓存,解决闭包问题格式(function(形参){代码处}(实参)};原创 2019-09-01 14:54:23 · 158 阅读 · 0 评论 -
设计模式之单例模式
保证一个类仅有一个实例,并提供一个访问他的全局访问点1.实例单例模式用一个变量来标志,当前是否已经为某个类创建过对象,若是,则在下一次获取该类时,直接返回之前的创建对象例var A = { XX: "123", YY: "1234", CC: function() { console.log("hello world"); } }...原创 2019-09-01 15:13:15 · 120 阅读 · 0 评论 -
数组去重
1.indexof()方法(IE8后)可返回某个指定元素在数组中首次出现的位置,若没有找到,则放回-1;function r(arr){var new=[];for(var i=0;i<arr.length;i++){if(new.indexOf(arr[i]==1){new.push(arr[i]);}}return new;}var arr=[1,2,1,3,4...原创 2019-09-01 15:39:31 · 181 阅读 · 0 评论 -
扁平化数组
多维数组===》一维数组法一:递归var arr=[1,[2,3,[4]]];function flatten(arr)var res=[];for(var i=0;i<arr.length,i++){if(Array.isArray[arr[i])){res=res.concat(flatten(arr[i]));}else{res.push(arr[i]);}}r...原创 2019-09-01 15:49:30 · 199 阅读 · 0 评论 -
BOM属性对象方法
1.window(浏览器窗口)属性name:浏览器窗口的名字或框架的名字例:window.name=“new”获取窗口名称document.write(name);top代表最顶层窗口如:window.top;parent:代表父级窗口,主要用于框架self:代表当前窗口,主要用于框架中innerHeight:浏览器窗口内高;innerWidth:浏览器窗口内宽;...原创 2019-09-01 19:48:39 · 334 阅读 · 0 评论 -
服务端渲染与前端渲染
服务端渲染1浏览器发送请求给服务器2服务器利用后台引擎渲染直接生成html文件3返回给前端直接插入页面缺点:占用服务器资源前端渲染1浏览器发送请求给服务器,2 服务器返回json数据3前端获得json数据进行读取,拼接字符串,展示页面4 前后端分离...原创 2019-09-01 19:57:10 · 317 阅读 · 0 评论 -
垃圾回收机制与内存泄漏
1.标记清除2.引用计数1.标记清除标记清除标记出需要清除的,具体原理当变量进入执行环境时,将这个变量标记为进入环境,变量离开环境时,则将其标记为离开环境,标记离开环境时会被收回。工作流程1,垃圾回收器在运行时回给内存中所有变量加上标记。2,去掉环境中的变量,以及被环境中的变量应用的变量的标记。3,再被加上标记的变量会被视为准备删除的变量。4,垃圾回收器完成内存清除,销毁那些...原创 2019-09-01 20:12:36 · 247 阅读 · 0 评论 -
eventloop
进程与线程一,Javascript为单线程任务队列单线程使得所有任务需要排队,前一个任务结束,才会执行后一个任务,若前一个任务不结束,后一个任务就需等待;任务分为同步任务与异步任务1 同步任务:在单线程上排队执行任务只有前一个任务执行完成,才能执行后一个任务2异步任务:不进入主线程而进入任务队列任务,只有任务队列通知主线程,某些异步任务可以执行了,这些任务才会进入主线程执行。二,...原创 2019-09-01 20:24:56 · 235 阅读 · 0 评论 -
apply与call
call().apply()是用括号里的对象来集成括号外函数属性例function add(a,b){alert(a+b);}function sub(a,b){alert(a-b);}add.call(sub,1,1);//值为2,使sub集成了add的函数属性区别:apply:最多有一个数组argArray,若要给该方法添加多个参数,则把参数写进此数组中。call:可...原创 2019-09-01 14:08:13 · 141 阅读 · 0 评论 -
函数柯里化
主要目的为减少函数传参,同时将一些固定参数私有化把接收多个参数函数变成一个接收一个单一参数的函数,并返回接收剩余参数而且返回结果的新函数的技术例// 普通的add函数function add(x, y) { return x + y}//柯里化var add1=function(x){return function(y){return x+y;}};//函数调用a...原创 2019-09-01 14:00:57 · 132 阅读 · 0 评论 -
js继承,原型实现继承的优缺点及解决方式
继承1,apply/call继承(构造函数继承)例:function parent(){ this.money=1;}function Child(){Parent.call(this)//调用Parent构造函数}2.原型继承function Human(){this.name="teacher";this,age=39;}function Man(){}Ma...原创 2019-08-30 21:21:19 · 1431 阅读 · 0 评论 -
arguments
其是一个不需要声明与赋值的默认对象,是一个数组,保存着参数列表当实参长度大于形参时无影响function add(num1,num2){ console.log(arguments);//1,2,3 return num1+num2+arguments[2]; }; var b=add(1,2,3);//6若形参长度比实际长度长,有影响 function add(num1,num...原创 2019-08-31 18:10:10 · 549 阅读 · 0 评论 -
数据类型判断
js六大数据类型number,string,object,Boolean,null undefined数据类型判断1,typeof例 if(typeof(A)=="string"){}2,instanceof a instanceof b? alert("true"):alert("false");例var a[]; console.log(a instanceof Ar...原创 2019-08-31 18:19:22 · 181 阅读 · 0 评论 -
作用域,闭包,作用域链
一,作用域变量在声明它的函数及该函数所嵌套的任意函数是有定义的例var num=2;function fun(){console.log(num);//undefinedvar num=3;console.log(num);//3}fun();二, 作用域链多个函数嵌套在一起,多个作用域相互嵌套,这是作用域链var num=1;function fun(){var n...原创 2019-08-31 22:49:35 · 136 阅读 · 0 评论 -
Ajax原生写法
异步的Ajax和xml用于快速创建动态网页技术部分数据刷新写法:function btnclick(){//创建核心对象xmlhttp=null;if(window.XMLHTTPRequest){xmlhttp=new XMLHTTPRequest}else if( window.ActiveXObject){xmlhttp=new ActiveXObject("Microsof...原创 2019-08-31 23:03:41 · 146 阅读 · 0 评论 -
对象身拷贝,浅拷贝
一,深拷贝a与b内存地址不同,但地址对应的堆内存的内容完全一致,即b是a的副本二,浅拷贝a与b的内存地址相同,即a与b是同一个东西,改变a值b也会改变,改变b值a亦会改变例浅拷贝var a=['1','2','3'];var b=a;b[0]='5';console.log('a',a);//['5','2','3'];console.log('b',b);//['5','2'...原创 2019-08-31 23:21:26 · 156 阅读 · 0 评论 -
图片懒加载,预加载
一,预加载提前加载图片,当用户需要查看时可直接从本地缓存中渲染是牺牲服务器前端性能获得更好的用户体验二,懒加载懒加载也叫延迟加载;延迟加载图片或符和某些条件时才加载某些图片;是作为服务器前端优化,减少请求数或延迟请求数...原创 2019-08-31 23:28:19 · 234 阅读 · 0 评论 -
this关键字
作用:在函数体内部,指代函数当前运行的环境例var f=function(){console.log(this.x);//指代当前运行环境里的x}var x=1;var obj={f:f,x:2,}//单独执行f();//1//obj环境执行obj.f();//2...原创 2019-09-01 13:05:05 · 149 阅读 · 0 评论 -
事件模型
事件委托将子元素事件通过冒泡形式交由元素执行例<ul id="pu"><li>1</li><li>1</li><li>1</li></ul>var ul=document.getElementById('pu');ul.οnclick=function(event){var e=ev...原创 2019-09-01 13:25:46 · 119 阅读 · 0 评论 -
window的onload事件和domcontentloaded事件
onload当页面载入完毕后执行Javascript代码<!DOCTYPE html><html><head><meta charset="utf-8"><title>操作对象被加载</title><script>window.οnlοad=function(){ document.getElem...原创 2019-09-01 13:40:43 · 1611 阅读 · 0 评论 -
for....in迭代与for...of区别
1.for…in可枚举对象,for…of不可以var obj={a:1,b:[],c:function(){}};for(var key in obj){console.log(key);}//结果是//a//b//c2.for…in枚举数组是key,for…of枚举数组得到是值var arr=[3,5,7];for(var i in arr){console.log(...原创 2019-09-01 13:54:00 · 443 阅读 · 0 评论 -
JS构造函数,原型,原型链
一,构造函数用来建造对像时初始化对象特点:构造函数名一般为大写字母开头,与new运算符一起使用来实例化对象例function Person(){}//构造函数var p=new Person();//实例化二,原型构造函数在创建过程中,系统就自动创建出一个空对象,其与构造函数相关联可有构造函数名.prototype访问三,原型链P对象---->Person.pro...原创 2019-08-30 20:39:36 · 139 阅读 · 0 评论