文章目录
基础数据类型和引用数据类型
-
引用类型存储
原型链
闭包
防抖和节流
- 链接:https://segmentfault.com/a/1190000018428170
- 防抖:当持续触发事件的时候,函数是完全不执行的,等最后一次触发结束的一段时间之后,再去执行。
// 防抖 function debounce(func, delay) { let timeout return function() { clearTimeout(timeout) // 如果持续触发,那么就清除定时器,定时器的回调就不会执行。 timeout = setTimeout(() => { func.apply(this, arguments) }, delay) } }
- 节流:让函数有节制地执行,而不是毫无节制的触发一次就执行一次。什么叫有节制呢?就是在一段时间内,只执行一次。
// 节流 function throttle(func, delay) { let run = true return function () { if (!run) { return // 如果开关关闭了,那就直接不执行下边的代码 } run = false // 持续触发的话,run一直是false,就会停在上边的判断那里 setTimeout(() => { func.apply(this, arguments) run = true // 定时器到时间之后,会把开关打开,我们的函数就会被执行 }, delay) } }
箭头函数
- 箭头函数都是匿名函数
- 如果是简单操作,不写
return
也可以默认返回 - 不能用作构造函数
- 没有
prototype
属性 - 不可以使用
new
命令,因为:- 没有自己的
this
,无法调用call,apply
。 - 没有
prototype
属性 ,而new
命令在执行时需要将构造函数的prototype
赋值给新的对象的__proto__
- new原理
- 创建一个新对象 - 将构造函数的作用域赋给新对象(这个this就指向了这个新对象) - 执行构造函数中的代码(为这个新对象添加属性) - 返回新对象
- 没有自己的
- 没有
this
- 普通函数的
this
指向调用它的对象,如果是构造函数,则指向创建的实例对象 - 箭头函数本身没有
this
,它在声明时可以捕获上下文的this
,比如在全局作用域中声明,则捕获window
的this
- 箭头函数的
this
一旦指向,则不会再改变,call、bind、apply
都不行,因为没有this
,但是可以改变其上下文的this
,间接改变箭头函数
- 普通函数的
- 不可以使用
arguments
对象,但是有rest
参数let B = (b)=>{ console.log(arguments); } B(1,2,3,4,5); // Uncaught ReferenceError: arguments is not defined let C = (...c) => { console.log(c); } C(1,2,3,4,5); // [1,2,3,4,5]
- 不可以使用
yield
函数,不能使用Generator
函数
从输入url到获取网页页面的详细过程
- 查询DNS(域名解析),获取域名对应的IP地址
- 浏览器与服务器建立tcp连接(三次握手)
- 浏览器向服务器端发送http请求(请求和传输数据)
- 服务器接受到这个请求后,根据路径参数,经过后端的一些处理生成html页面代码返回给浏览器
- 浏览器拿到完整的html页面代码开始解析和渲染,如果遇到引用的外部css、图片等静态资源,他们同样也是一个个htpp请求,重复上面的步骤。
- 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户。
- 解析html文件,生成DOM树
- 解析css文件,生成CSSOM树
- DOM树和CSSOM树生成渲染树(render)
- 对元素进行布局,确定定位
- 对页面进行渲染绘制
重绘和回流
兼容(opacity、transform)
- -ms-: IE浏览器
- -moz-: 火狐浏览器
- -o-: 欧朋浏览器
- -webkit-: 谷歌、苹果浏览器