promise是什么?
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
为什么会有promise?
为了避免界面冻结(任务)
AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。
异步回调的问题:
时间复杂度&&空间复杂度
空间复杂度指的是对一个算法在运行过程中临时占用存储空间大小的量度,而时间复杂度指的是一个代表算法输入值的字符串的长度的函数,定性描述该算法的运行时间。
B端C端
B端就是企业内部使用的或者是给其他企业使用的平台/系统,PC端系统偏多
C端就是给单个用户使用的,h5、小程序偏多
CI&&CD
CI的英文名称是Continuous Integration,中文翻译为:持续集成。
CD可对应多个英文名称,持续交付Continuous Delivery和持续部署Continuous Deployment。
内存溢出&&内存泄漏
内存溢出:没有足够的内存提供给后面的程序运行
内存泄漏:来不及释放的内存太多,导致程序运行缓慢或直接崩溃,内存泄漏最后将会导致内存溢出
最常用的encodeURI和encodeURIComponent
对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。
它们都是编码URL,唯一区别就是编码的字符范围,其中
encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
实际例子来说,encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。
1rem、1em、1vh、1px各自代表的含义?
rem
rem是全部的长度都相对于根元素元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。
em
子元素字体大小的em是相对于父元素字体大小
元素的width/height/padding/margin用em的话是相对于该元素的font-size
vw/vh
全称是 Viewport Width 和 Viewport Height,视窗的宽度和高度,相当于 屏幕宽度和高度的 1%,不过,处理宽度的时候%单位更合适,处理高度的 话 vh 单位更好。
px
px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。
一般电脑的分辨率有{1920*1024}等不同的分辨率
1920*1024 前者是屏幕宽度总共有1920个像素,后者则是高度为1024个像素
页面渲染html的过程?
不需要死记硬背,理解整个过程即可
浏览器渲染页面的一般过程:
1.浏览器解析html源码,然后创建一个 DOM树。并行请求 css/image/js在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点。DOM树的根节点就是 documentElement,对应的是html标签。
2.浏览器解析CSS代码,计算出最终的样式数据。构建CSSOM树。对CSS代码中非法的语法它会直接忽略掉。解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置 < 用户设置 < 外链样式 < 内联样式 < html中的style。
3.DOM Tree + CSSOM --> 渲染树(rendering tree)。渲染树和DOM树有点像,但是是有区别的。
DOM树完全和html标签一一对应,但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等。而且一大段文本中的每一个行在渲染树中都是独立的一个节点。渲染树中的每一个节点都存储有对应的css属性。
4.一旦渲染树创建好了,浏览器就可以根据渲染树直接把页面绘制到屏幕上。
以上四个步骤并不是一次性顺序完成的。如果DOM或者CSSOM被修改,以上过程会被重复执行。实际上,CSS和JavaScript往往会多次修改DOM或者CSSOM。
如何中断ajax请求?
一种是设置超时时间让ajax自动断开,另一种是手动停止ajax请求,其核心是调用XML对象的abort方法,ajax.abort()
说一下事件代理?
事件委托是指将事件绑定到目标元素的父元素上,利用冒泡机制触发该事件
ulEl.addEventListener('click', function(e){ var target = event.target || event.srcElement; if(!!target && target.nodeName.toUpperCase() === "LI"){ console.log(target.innerHTML); } }, false);
Vuex是什么?
VueX 是一个专门为 Vue.js 应用设计的状态管理架构,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。
Vue有五个核心概念,state, getters, mutations, actions, modules。本文将对这个五个核心概念进行梳理。
总结
state => 基本数据
getters => 从基本数据派生的数据
mutations => 提交更改数据的方法,同步!
actions => 像一个装饰器,包裹mutations,使之可以异步。
modules => 模块化Vuex
post和get请求的区别
Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;
1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来
2.使用Get请求发送数据量小,Post请求发送数据量大
GET和POST本质上就是TCP链接,
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
get参数是在url上 post参数是在request body上
get比post安全一点
get是从服务器上获取数据,post是向服务器传送数据。
GET请求参数会被完整保留在浏览器的历史记录里,而POST中的参数不会被保留
常见的状态码以及含义如下:
200 OK 服务器成功处理请求
301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包含一个Location URL,说明资源现在所处的位置
304 Not Modified(未修改) 客户的缓存资源是最新的,要客户端使用缓存内容
404 Not Found 未找到资源
501 Internal Server Error 服务器遇到错误,使其无法对请求提供服务
渐进增强与优雅降级
渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进,达到更好的用户体验。 优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?
除了正常模式运行外,ECMAscript添加了第二种运行模式:“严格模式”。 作用: 1) 消除js不合理,不严谨地方,减少怪异行为 2) 消除代码运行的不安全之处, 3) 提高编译器的效率,增加运行速度 4) 为未来的js新版本做铺垫。安全严谨速度快
箭头函数和普通函数的区别
一.外形不同:箭头函数使用箭头定义,普通函数中没有
二.箭头函数都是匿名函数
普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。
三.箭头函数不能用于构造函数,不能使用new
普通函数可以用于构造函数,以此创建对象实例。
四.箭头函数中this的指向不同
在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。
1.箭头函数本身不创建this
也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。
(2).箭头函数不具有prototype原型对象。
(1).箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
(2).普通函数的this指向调用它的那个对象
&位运算符
&&逻辑运算符
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
什么是ES6?
ES6, 全称 ECMAScript 6.0,是 JavaScript 的下一个版本标准,2015年6月份发版。ES6的主要目的是为了解决 ES5 的先天不足。
同步&异步
同步:一般指的是在代码运行的过程中,从上到下逐步运行代码,每一部分代码运行完成之后,下面的代码才能开始运行
异步:指的是当我们需要一些代码在执行的时候不会影响其他代码的执行,也就是在执行代码的同时,可以进行其他的代码的执行,不用等待代码执行完成之后才执行之后的代码,就像我们人一样,可以一边看电视剧一边吃东西一样,互不干扰,这种方式就是异步。
什么是回调地狱
一个异步请求套着一个异步请求,一个异步请求依赖于另一个的执行结果,使用回调的方式相互嵌套。
这会导致代码很丑陋,不方便后期维护
所谓同步异步,就是我在执行一个任务1,要调用另一个任务2,另一个任务2在我在我任务1完成了还没有加载好,就可以设置async,await任务2,然后任务2中通过Promise
然后可以实现任务1等待任务二执行完毕继续执行。
存储时刻消灭卡死状态,用户可以在页面加载内容时执行其他事件,加载任务并没有消失而是在后台继续执行
上一篇:香减雨昏烟暗,草遍江南
下一篇:List详解