总结

110 阅读2分钟

css权重排序

!import(10000)>

style(1000)>

id(100)>

class,伪类选择器,属性选择器(10)>

标签,伪元素选择器(1)>

后代选择器,子选择器,兄弟选择器(0)

css3新增选择器

  1. E[attr=val],属性选择器, |=(val-开头),^=(val开头),*=(包含val字符),~=(比配词列表中的某个)
  2. E:nth-child(n)
  3. E:first-child
  4. E:last-child
  5. E>F,子选择器
  6. E+F,相邻兄弟选择器
  7. E~F,后面兄弟选择器

说一说event loop

js是单线程的,为了模拟多线程操作,event loop应用而生。js将等待执行的事件放进事件队列,当一件事件执行完后,检查事件队列。先检查微队列(promise)是否执行完毕,再检查宏队列(setTimeOut)是否执行完毕,当一件宏任务执行完毕之后,检查微队列是否有新任务。event loop就是检查事件队列的这种机制。

事件流

事件流分为冒泡事件和捕获事件,冒泡事件是从目标节点开始,往父节点冒泡执行,直到查到根节点;捕获事件正好相反,从根节点开始执行,一直往子节点查找执行。

说说从输入url到看见整个页面发生的全过程

  1. DNS解析:将域名地址解析为ip地址
  2. TCP连接:TCP三次握手
  3. 发送HTTP请求
  4. 服务器处理请求并且返回报文
  5. 浏览器解析渲染页面
  6. 断开连接:TCP四次握手

css和js会影响页面效率,为什么?

css加载不会影响,但是css解析生成css规格树会影响render树生成,影响布局。所以一般css加载放在head里面。

js主要负责交互,但是元素都没加载出来,会影响用户体验。所以js放在底部加载。

描述一下hits

  1. this总是指向最后一个调用它的对象。
  2. this并不是创建的时候确定的。
  3. this指向可以通过applay,call,bind,es6的箭头函数来改变。

怎么改变this指向?

  1. es6箭头函数:箭头函数没有this绑定,通过查找作用域链来定义其值。如果箭头函数被非非箭头函数包含,this绑定的一定是最近一层的非箭头函数的this。
  2. applay,第二个参数为数据
  3. call,接受多个参数
  4. 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) })