目录
1.js里哪些操作会造成内存泄漏
答:
(1)在函数中定义全局变量
(2)闭包。闭包可以维持函数内局部变量,使其得不到释放。
(3)删除元素却没有清除DOM元素引用
(4)被遗忘的定时器或者回调
(5)子元素存在引用引起的内存泄漏
2.js里什么是垃圾回收机制
找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,
因为其开销比较大,所以垃圾回收系统(GC)会按照固定的时间间隔,周期性的执行。
两种方法:1.标记清除 2.引用计数
3.js延迟加载都有哪些方式
JS延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件。
1.script标签中加入defer属性
2.script标签中加入async属性
3.动态创建dom的方法
4.使用jQuery的getScript方法
5.setTimeout
6.最后 引入js
4.js缓存的三种方法及区别与特点
H5本地存储:
sessionStorage:临时的会话存储,只要当前的会话窗口未关闭,存储的信息就不会丢失,即便刷新了页面或者在编辑器中更改了代码,存储的会话信息也不会丢失。
localStorage是一种永久存储,会一直将数据存储在客户端的储存方式,即使关闭了浏览器,下次打开的时候仍然可以看到之前存储的未主动清除的数据(即便是杀毒软件或者浏览器自带的清除功能,也不能将localStorage存储的数据清除掉)
Cookie:
Cookie是存储在用户计算机上的小文件,保存特定客户端和网站的适量数据,并可以由Web服务器或客户端浏览器访问,允许服务器提供针对特定用户定制的页面,或者页面本身可以包含一些知道cookie中的数据的脚本。
cookie和H5本地存储的区别
1.cookie兼容所有的浏览器(本地cookie谷歌不支持),storage不支持IE6~8;
2.二者对存储的内容均有大小限制,前者同源情况写一般不能存储4kb的内容,后者同源一般能存储只能存储5MB的数据
3.cookie有过期时间,localStorage是永久存储(如果你不手动去删除的话)
4.一些浏览器处于安全的角度可能会禁用cookie,但无法禁用localStorage
5.cookie有什么弊端
cookie兼容所有的浏览器,但其存储的数据是有大小限制的,一般同源是4kb;
cookie本地存储的数据会被发送到服务器(所以建议在服务器环境下使用cookie);
存在跨域访问问题;
浪费带宽等等;
6.怎么阻止冒泡和浏览器默认事件
标准浏览器: 阻止冒泡e.stopPropagation() 阻止默认事件e.preventDefault()
ie浏览器: 阻止冒泡e.cancleBubble=true 阻止默认事件e.returnValue = fasle;
7.什么是块作用域,什么是函数作用域?
块作用域:ES5中没有块作用域;ES6的块级作用域,任何一对花括号中的语句集都属于一个块,
在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域
函数作用域:函数作用域是针对局部变量来说的,在函数中定义的变量在函数外不能获取
8.什么是面向对象编程,三个属性是什么
面向对象编程是一种编程开发思想。 它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。,
每一个对象都是功能中心,具有明确分工,可以完成接受信息、处理数据、发出信息等任务。
因此,面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程(procedural programming),更适合多人合作的大型软件项目。
三个属性:封装、继承、多态
9.我声明了一个构造函数,调用的时候 我写new 和没有写new有什么区别?
任何函数,如果不通过 new 操作符来调用,就是直接执行函数体。
如果使用 new调用,则不单执行函数,还会返回个实例对象。以这种方式调用构造函数实际上会经历以下4个步骤:
(1) 创建一个新对象;
(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象);
(3) 执行构造函数中的代码(为这个新对象添加属性);
(4) 返回新对象。
10.前端调试bug都有哪些方法
断点调试
console.log调试
检测dom事件执行顺序
打开控制台CSS调试
11.怎么实现图片懒加载
定义:当打开一个有很多图片的页面时,先只加载页面上看到的图片,等滚动到页面下面时,再加载所需的图片。这就是图片懒加载。
作用:减少或延迟请求数,缓解浏览器的压力,增强用户体验
实现方式:
设置图片src属性为同一张图片,同时自定义一个data-src属性来存储图片的真实地址
页面初始化显示的时候或者浏览器发生滚动的时候判断图片是否在视野中
当图片在视野中时,通过js自动改变该区域的图片的src属性为真实地址
12.类数组有用过吗,什么情况下用,怎么转化成真正数组
有用过,比如document.getElementsByTagName()的返回值就是一个类数组,
比如函数中的arguments对象也是一个类数组。
常用的类数组转数组的方法有3种:
Array.from(类数组);
[...类数组]
Array.prototype.slice.call(类数组)
13.数组里面的排序有哪些方法,怎么用
- 冒泡排序:
- 插入排序
14.多维数组怎么拍平,扁平,怎么去实现这个方法呢!
-
方法1:ES6的方法数组.flat()
-
方法2:
15.数组元素的求和,除了循环还有没有更好的方式
- 不考虑算法复杂度,用递归做
- 函数式编程 map-reduce:
- forEach遍历:
- eval:
以上就是本节的内容,希望能帮助到你,想了解更多点我主页,以后也会更新更多的内容,谢谢观看!