css权重排序
!import(10000)>
style(1000)>
id(100)>
class,伪类选择器,属性选择器(10)>
标签,伪元素选择器(1)>
后代选择器,子选择器,兄弟选择器(0)
css3新增选择器
- E[attr=val],属性选择器, |=(val-开头),^=(val开头),*=(包含val字符),~=(比配词列表中的某个)
- E:nth-child(n)
- E:first-child
- E:last-child
- E>F,子选择器
- E+F,相邻兄弟选择器
- E~F,后面兄弟选择器
说一说event loop
js是单线程的,为了模拟多线程操作,event loop应用而生。js将等待执行的事件放进事件队列,当一件事件执行完后,检查事件队列。先检查微队列(promise)是否执行完毕,再检查宏队列(setTimeOut)是否执行完毕,当一件宏任务执行完毕之后,检查微队列是否有新任务。event loop就是检查事件队列的这种机制。
事件流
事件流分为冒泡事件和捕获事件,冒泡事件是从目标节点开始,往父节点冒泡执行,直到查到根节点;捕获事件正好相反,从根节点开始执行,一直往子节点查找执行。
说说从输入url到看见整个页面发生的全过程
- DNS解析:将域名地址解析为ip地址
- TCP连接:TCP三次握手
- 发送HTTP请求
- 服务器处理请求并且返回报文
- 浏览器解析渲染页面
- 断开连接:TCP四次握手
css和js会影响页面效率,为什么?
css加载不会影响,但是css解析生成css规格树会影响render树生成,影响布局。所以一般css加载放在head里面。
js主要负责交互,但是元素都没加载出来,会影响用户体验。所以js放在底部加载。
描述一下hits
- this总是指向最后一个调用它的对象。
- this并不是创建的时候确定的。
- this指向可以通过applay,call,bind,es6的箭头函数来改变。
怎么改变this指向?
- es6箭头函数:箭头函数没有this绑定,通过查找作用域链来定义其值。如果箭头函数被非非箭头函数包含,this绑定的一定是最近一层的非箭头函数的this。
- applay,第二个参数为数据
- call,接受多个参数
- bind,返回新函数,要手动执行
applay(thisArg,[argsArrays]) call(thisArg,a,b) bind(thisArg,a,b)()
写一个promise实例
function getJSON(url) {
let reqPromiese = new Promise(function(reject, resolve){
let client = new XMLHttpRequest()
client.open('GET',url)
client.getreadystatuschange = handdler
client.responseType = 'json'
clent.setRequestHeader("Accept","applaycation/json")
client.send()
function handler() {
if(this.readyStatus!==4) return
if(this.status == 200) {
resolve(this.response)
}else{
resolve(new Error(this.statusText))
}
}
})
return reqPromiese
}
getJSON('/post.json').then(
function(res){ console.log(res) },
function(error){ console.log('出错了'+error) })