JavaScript学习

作者:MengYu | 分类:web前端 | 浏览:68 | 评论:

1. 内存泄漏可以简单地定义为那些无法被应用所使用但又没有被操作系统回收掉的内存
 
2. 引起内存泄漏的操作有哪些?
1.全局变量引起 2.闭包引起 3.dom清空,事件未清除 4.子元素存在引用 5.被遗忘的计时器
 
3. 理解原型链
function Fn() {} 构造函数
var f1= new Fn() 变量f1为构造函数创建的对象
构造函数的prototype属性值就是对象原型。 (Fn.prototype就是对象的原型)
    构造函数的prototype属性值的类型就是对象  typeof Fn.prototype===object. 
对象原型中的constructor属性指向构造函数 (Fn.prototype.constructor===Fn)
 
对象(f1)的__proto__属性值就是对象的原型。(f1.__proto__就是对象原型)
Fn.prototype===f1.__proto__ 其实它们两个就是同一个对象
Object.prototype.__proto__===null
(补充:假设Object.prototype是终点,原型链上的所有节点都是对象,不能是字符串、数字、布 尔值等原始类型,“原型链的终点是null”虽然不是必须不可的,但是却是最合理的。)
 
4. JS的AMD模块加载器
AMD是解决JS模块化的规范,实现这样的一个模块加载器的关键在于解决每个模块依赖的解析。
 
5. js如何判断网页中图片加载成功或者失败
onload与onerror
 
6. 递归和迭代的区别是什么,各有什么优缺点?
程序调用自身称为递归利用变量的原值推出新值称为迭代.
递归的优点 大问题转化为小问题,可以减少代码量,同时应为代码精简,可读性好, 缺点就是,递归调用浪费了空间,而且递归太深容易造成堆栈(函数调用层次太深)的溢出。
迭代的好处 就是代码运行效率好,因为时间只因循环次数增加而增加,而且没有额外的空间开销, 缺点就是代码不如递归简洁。
1)堆溢出: 不断的new 一个对象,一直创建新的对象,
2)栈溢出:死循环或者是递归太深
1)程序内存布局场景下,堆与栈表示的是两种内存管理方式;
2)数据结构场景下,堆与栈表示两种常用的数据结构。
1)堆是动态分配的内存 大小不定 也不会自动释放
2)栈是自动分配的内存空间 由系统自动释放。释放不了 就溢出了
 
7. 设计模式
策略模式就是说我们将一系列的算法封装起来,使其相互之间可以替换,封装的算法具有一定的独立性,不会随客户端的变化而变化,比较常见的使用常见就是类似于 表单验证这种多场景的情况,我们使用策略模式就可以避免使用一堆的if...else。
同源策略是指只有具有相同源的页面才能够共享数据,比如cookie,同源是指页面具有相同的协议、域名、端口号,有一项不同就不是同源。 有同源策略能够保证web网页的安全性。
https://www.cnblogs.com/imwtr/p/9451129.html#o2
 
8. typeof操作符返回值有哪些
typeof的返回值有undefined、boolean、string、number、object、function、symbol
 
9. 如何阻止事件冒泡和默认事件?
event.stopPropagation()方法来阻止事件冒泡,event.preventDefault()方法来阻止默认事件(例 如,当点击提交按钮时阻止对表单的提交)。
 
10. 懒加载的原理及实现
  • 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再img标签的自定义属性中(比如data-src)。当js监听到该图片元素进入可视窗口时,即将自定义属性中的地址存储到src属性中,达到懒加载的效果。
  • 这样做能防止页面一次性向服务器响应大量请求导致服务器响应慢,页面卡顿或崩溃等问题、可以减轻服务器的压力、节约了流量,用户体验好。
 
11. 预加载的原理及实现
原理:常用的是new Image();设置其src来实现预载,再使用onload方法回调预载完成事件。
预加载可以说是牺牲服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的反映。
 
12. 函数节流是什么?
函数节流就是让一个函数无法在很短的时间间隔内连续调用,而是间隔一段时间执行。
 
节流是当数据量大的时候,让请求响应隔一段时间触发一次,如果不停的请求会给服务器太大的压力,节流是为了更好的优化代码
 
 
 
13. 浏览器内核分别对应哪些浏览器?
Trident对应于IE,Gecko对应于火狐浏览器,Webkit有chrome和safari,Presto 有Opera。
 
14. 什么是深拷贝,什么是浅拷贝?
浅拷贝是指仅仅复制对象的引用,而不是复制对象本身;深拷贝则是把复制对象所引用的全部对象都复制一遍。
 
15. SVG和Canvas的区别?
Canvas(针对位图)是使用JavaScript程序绘图(动态生成),SVG(针对矢量图)是使用XML文档描述来绘图。
 
16. let和const的异同有哪些?
let和const都是对变量的声明,都有块级作用域的概念,不同的是const是对常量的声明,因此声明同时必须赋值,且之后不能更改,而let则可以。
 
17. 闭包?
闭包就是能够读取其他函数内部变量的函数。
 
18. get与post?
  • get请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。
  • post不同,post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。
上一篇:javascript     下一篇:js 设置选中和不选中的方法

网名:--梦煜

姓名:梦煜

喜欢的书:《从你的全世界路过》《论语》

喜欢的音乐:《十年》《男孩》

网站分类
hello

hello