css3有哪些新的属性?
border-radius border-image border-color backgroundsize text-shadow
get的核心概念有哪些?
Workspace: 工作区,就是你平时存放项目代码的地方 Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息 Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本 Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
get中和分支相关的操作有哪些?
查看本地分支: git branch -r 创建本地分支: git checkout [name] 创建新分支并立即切换到新分支: git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项 合并分支: git push origin [name] 删除远程分支:$ git push origin :heads/[name]
标准盒模型和IE怪异盒模型的区别
标准盒模型采用的W3C标准,盒子的content内容部分由width宽度和height高度决定,添加padding内边距或border外边框后,宽高都会进行相应增长; 怪异盒模型也称为IE盒模型,是IE浏览器设计元素时遵循的规则。怪异盒模型的宽高在div盒子初次设置时就已经规定,添加padding或者border,会从中减少content内容的占据区域,来为padding和border制造空间,宽高不会相对应的进行增长
event loop 事件循环如何理解?
JavaScript是一种单线程的编程语言,同一时间只能做一件事,所有任务都需要排队依次完成。 为什么JS不能有多个线程呢 答:作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准。
为了避免这种复杂性,因此JS只能是单线程。 同步任务 含义:在主线程上排队执行的任务,只有一个任务执行完毕,才能执行后一个任务
异步任务 含义:不进入主线程,而进入“任务队列(task queue)”的任务,只有“任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
分类:异步任务又分为宏任务和微任务。所有同步任务都在主线程上执行,形成一个函数调用栈(执行栈),而异步则先放到任务队列(task queue)里,任务队列又分为宏任务(macro-task)与微任务(micro-task)。
宏任务 宏任务包括:script(整体代码)、setTimout、setInterval、setImmediate(node.js环境)、I/O、UI交互事件
微任务 微任务包括:new promise().then(回调)、MutationObserver(html5新特新)、Object.observe(已废弃)、process.nextTick(node环境)
若同时存在promise和nextTick,则先执行nextTick
2、执行过程 所有同步任务都在主线程上执行,形成一个执行栈(调用栈); 主线程之外,还存在一个‘任务队列’(task queue),浏览器中的各种 Web API 为异步的代码提供了一个单独的运行空间,当异步的代码运行完毕以后,会将代码中的回调送入到 任务队列中(队列遵循先进先出得原则) 一旦主线程的栈中的所有同步任务执行完毕后,调用栈为空时系统就会将队列中的回调函数依次压入调用栈中执行,当调用栈为空时,仍然会不断循环检测任务队列中是否有代码需要执行; 3、执行顺序 先执行同步代码, 遇到异步宏任务则将异步宏任务放入宏任务队列中, 遇到异步微任务则将异步微任务放入微任务队列中, 当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行, 微任务执行完毕后再将异步宏任务从队列中调入主线程执行, 一直循环直至所有任务执行完毕。
数组的方法?
push()头部添加 join()数组转字符串 pop()末尾添加 shift()头部删除 unshift()末尾删除 reverse()翻转数组 slice()数组截取
扩展运算符于rest剩余参数是什么意思?
扩展运算符( spread )是三个点(…),可以将一个数组转为用逗号分隔的参数序列。 总的来说就是把一个大元素给打散成一个个单独的小元素。 基本用法:拆解字符串与数组 剩余运算符(the rest operator),它的样子看起来和展开操作符一样,但是它是用于解构数组和对象。在某种程
度上,剩余元素和展开元素相反,展开元素会“展开”数组变成多个元素,剩余元素会收集多个元素和“压缩”成一个
单一的元素。 说的通俗点,有点像吸星大法,收集多个元素,压缩成单一的元素 。 rest参数用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变 量将多余的参数放入数组中。 例如实现计算传入所有参数的和
promise的理解?
⑴promise是异步操作的一种解决方案,一般用来解决层层嵌套的回调函数(回调地狱 callback hell)的问题。
⑵基本用法
①只能通过构造函数实例化创建。const p = new Promise((resolve,reject) => {}),参数是一个回调函数,回调函数中的这两个参数也都是回调函数。
②三种状态:初始状态是pending(进行中)、执行resolve后由pending变成fulfilled(或者resolved 表示已成功)、执行reject后 , 由pending变成rejected(已失败)。状态一旦改变,就不会再改变了,比如先执行resolve(),状态变化为fulfilled,再执行reject(),状态变化也不会改变,也是fulfilled
③promise的实例对象方法then():
then(()=> {},()=> {});
then方法也有2个参数(回调函数),当状态是pending->fulfilled时,执行第一个回调函数;当状态是pending->rejected时,执行第二个回调函数; resolve和reject是可以传入参数的,传入参数后,then状态对应的回调函数也会传入该参数。then方法执行后返回一个新的Promise对象。输出then方法,返回的promise对象的状态改变,是pending状态。在then的回调函数中,return 后面的东西,会用promise包装一下,默认返回的永远是resolve的成功状态。return 123;等价于 return new Promise((resolve,reject) => {
resolve(123);reject(123)})
④解决回调地狱;不加return,默认返回成功状态的promise,加上return之后就会根据上一个return返回的promise状态来执行。
⑤catch()方法
专门用来处理rejected状态,本质是then的特例。
用法:catch(err => {console.log(err)})等价于then(null, err => {console.log(err)})。可以捕获它前面的错误,这样可以处理Promise内部的错误。
⑥finally()方法
用来处理最终状态的。本质上是then()的特例。该方法不论任何变化都会执行(不变化不执行),最终执行。
⑦promise.resolve()和promise.reject()
Promise.resolve()是成功状态Promise的一种简写形式,当Promise.resolve()接收的是Promise对象时,直接返回这个对象,什么都不做。当实例化时resolve()接收的是Promise对象,后面的then会根据传递的Promise对象的状态变化决定执行哪一个回调,然后就立即执行thenable对象的then方法。
Promise.reject()是失败状态Promise的一种简写形式,不管什么参数,都会原封不动的向后传递,作为后续方法的参数。
⑧Promise.all()用来关注多个Promise对象的变化的,传入多个promise实例,包装成一个新的promise实例返回。Promise.all()参数可以是数组。
Promise.all()的状态变化与所有传入Promise实例对象状态有关,所有的状态都变成resolved,最终的状态才会变成resolved,只要有一个变成rejected,最终的状态就变成rejected。
⑨Promise.race()的状态取决于第一个完成的Promise对象,如果第一个完成的成功了,那么最终的就成功,否则最终失败。
Promise.allSettled()的状态与传入的Promise状态无关,它永远都是成功状态的,它只会记录下各个Promise的表现。
⑩Promise.any()
参数中的Promise都失败最终才会失败
参数中只要有一个为成功状态,那么最终就是成功
返回是第一个成功的值,后面就不管了
实际应用:一次性加载多张图片时,哪一张先加载出来就显示哪一张,此时就可以使用Promise.any()方法
⑶注意事项
resolve或reject执行后的代码可以执行代码,但不推荐,因为当resolve或reject执行后,过程是结束了的,其余操作应该在then中操作。 如果参数不是promise数组,会将不是promise的数组元素转变为promise对象。 不只是数组,任何可遍历的都可以作为参数。 1、每一个Promise都添加catch
2、最后统一处理,但只会处理一次
错误即可以单独处理,也可以统一处理,一旦被处理就不会在其他地方再处理一遍。
es6的导入导出
export default 需要导出的名字 import 名字自己起 from '文件位置'