JS(一) ● get请求传参长度的误区 ● 补充get和post请求在缓存方面的区别 ● 说一下闭包 ● 如何解决异步回调地狱 ● 说说前端中的事件流 ● 如何让事件先冒泡后捕获 ● 说一下事件委托 ● 说一下图片的懒加载和预加载 ● mouseover和mouseenter的区别 ● js的new操作符做了哪些事情 ● 改变函数内部this指针的指向函数(bind,apply,call的区别)

JS(一)
● get请求传参长度的误区
● 补充get和post请求在缓存方面的区别
● 说一下闭包
● 如何解决异步回调地狱
● 说说前端中的事件流
● 如何让事件先冒泡后捕获
● 说一下事件委托
● 说一下图片的懒加载和预加载
● mouseover和mouseenter的区别
● js的new操作符做了哪些事情
● 改变函数内部this指针的指向函数(bind,apply,call的区别)


误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。
实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点:

HTTP 协议 未规定 GET 和POST的长度限制

GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度

不同的浏览器和WEB服务器,限制的最大长度不一样

要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte

● 补充get和post请求在缓存方面的区别

  • get请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。
  • post不同,post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。

● 说一下闭包

一句话可以概括:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放

● 如何解决异步回调地狱

promise、generator、async/await

● 说说前端中的事件流

addEventListener:addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

IE只支持事件冒泡。

● 如何让事件先冒泡后捕获

在DOM标准事件模型中,是先捕获后冒泡。但是如果要实现先冒泡后捕获的效果,对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被捕获后再执行捕获之间。

● 说一下事件委托

事件委托指的是,不在事件的发生地(直接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素DOM的类型,来做出不同的响应。
举例:最经典的就是ul和li标签的事件监听,比如我们在添加事件时候,采用事件委托机制,不会在li标签上直接添加,而是在ul父元素上添加。

好处:比较合适动态元素的绑定,新添加的子元素也会有监听函数,也可以有事件触发机制。

● 说一下图片的懒加载和预加载

预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。
懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。

两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载

懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。

● mouseover和mouseenter的区别

mouseover:当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡的过程。对应的移除事件是mouseout

mouseenter:当鼠标移入元素本身(不包含元素的子元素)会触发事件,也就是不会冒泡,对应的移除事件是mouseleave

● js的new操作符做了哪些事情

  1. new 操作符新建了一个空对象
  2. 这个对象原型指向构造函数的prototype
  3. 执行构造函数后返回这个对象。

● 改变函数内部this指针的指向函数(bind,apply,call的区别)

通过apply和call改变函数的this指向,他们两个函数的第一个参数都是一样的表示要改变指向的那个对象,第二个参数,apply是数组,而call则是arg1,arg2...这种形式

通过bind改变this作用域会返回一个新的函数,这个函数不会马上执行。