前端面试点复习整合——前端基础篇(3) JavaScript 篇

*内容参考整理自牛客网

目录

      • 一、 get请求传参长度的误区
      • 二、get和post请求在缓存方面的区别
      • 三、说一下闭包
      • 四、如何解决异步回调地狱
      • 五、说说前端中的事件流
      • 六、说一下事件委托
      • 七、说一下图片的懒加载和预加载
      • 八、 js的各种位置,比如clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别?
      • 九、异步加载js的方法
      • 十、Ajax解决浏览器缓存问题
      • 十一、JS中的垃圾回收机制
      • 十二、将原生的ajax封装成promise
      • 十三、js判断类型
      • 十四、数组去重
      • 十五、讲讲JS的语言特性
      • 十六、JS实现跨域
      • 十七、重排和重绘
      • 十八、 跨域的原理
      • 十九、this的指向 哪几种
      • 二十、JS中继承实现的几种方式
      • 二十一、 什么是事件监听
      • 二十二、介绍一下promise
      • 二十三、说说C++,Java,JavaScript这三种语言的区别
      • 二十四、深浅拷贝的区别

一、 get请求传参长度的误区

HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点:

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

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

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

二、get和post请求在缓存方面的区别

get请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存

post不同,post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。

三、说一下闭包

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

闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。闭包就是就是函数的“堆栈”在函数返回后并不释放,我们也可以理解为这些函数堆栈并不在栈上分配而是在堆上分配。当在一个函数内定义另外一个函数就会产生闭包。

闭包 有什么用:

匿名自执行函数:我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,比如:别的函数可能误用这些变量;造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,可以用闭包。

结果缓存:我们开发中会碰到很多情况,设想我们有一个处理过程很耗时的函数对象,每次调用都会花费很长时间,那么我们就需要将计算出来的值存储起来,当调用这个函数的时候,首先在缓存中查找,如果找不到,则进行计算,然后更新缓存并返回值,如果找到了,直接返回查找到的值即可。闭包正是可以做到这一点,因为它不会释放外部的引用,从而函数内部的值可以得以保留。

封装:实现类和继承等。

四、如何解决异步回调地狱

promisegeneratorasync/await

五、说说前端中的事件流

HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件onclick、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。

什么是事件流:事件流描述的是从页面中接收事件的顺序,DOM2级事件流包括下面几个阶段。

事件捕获阶段;

处于目标阶段;

事件冒泡阶段。

六、说一下事件委托

简介:事件委托指的是,不在事件的发生地(直接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素DOM的类型,来做出不同的响应。

举例:最经典的就是ul和li标签的事件监听,比如我们在添加事件时候,采用事件委托机制,不会在li标签上直接添加,而是在ul父元素上添加。

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

七、说一下图片的懒加载和预加载

预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。

懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。

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

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

八、 js的各种位置,比如clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别?

clientHeight:表示的是可视区域的高度,不包含border和滚动条;

offsetHeight:表示可视区域的高度,包含了border和滚动条;

scrollHeight:表示了所有区域的高度,包含了因为滚动被隐藏的部分;

clientTop:表示边框border的厚度,在未指定的情况下一般为0;

scrollTop:滚动后被隐藏的高度,获取对象相对于由offsetParent属性指定的父坐标(css定位的元素或body元素)距离顶端的高度。

九、异步加载js的方法

defer:只支持IE如果您的脚本不会改变文档的内容,可将 defer 属性加入到

你可能感兴趣的:(笔记)