1.js闭包(道可道,很是道;名可名,很是名)javascript
函数内部存在一个函数,建立闭包最多见方式,就是在一个函数内部建立另外一个函数java
即一个函数能够访问另外一个函数的做用域算法
优势:能够缓存变量,下次访问直接打开 避免全局变量的污染编程
缺点: 回调地狱,形成内存泄漏若是不是由于某些特殊任务而须要闭包,在没有必要的状况下,json
在其它函数中建立函数是不明智的,由于闭包对脚本性能具备负面影响,包括处理速度和内存消耗。数组
匿名函数最大的用途是建立闭包,而且还能够构建命名空间,以减小全局变量的使用。浏览器
从而使用闭包模块化代码,减小全局变量的污染。缓存
闭包只能取得包含函数中任何变量的最后一个值,这是由于闭包所保存的是整个变量对象,安全
而不是某个特殊的变量。闭包
2.js垃圾回收机制?
GC算法Garbage Collection
引用计算法(不用就清除)、标记清除计算法(没标记的销毁)、复制算法(复制)
在javascript中,若是一个对象再也不被引用,那么这个对象就会被垃圾回收机制回收;
若是两个对象互相引用,而再也不被第3者所引用,那么这两个互相引用的对象也会被回收。
3.面向对象的理解?
面向对象是一种编程思想使用抽象方式抽象出显示数据模型
在编程中增长了代码的维护性、复用性和灵活性,
三大特征:封装(公有方法私有化),继承(实现代码的复用),多态(运行才能肯定的方法)
封装:把描述一个对象的属性和行为封装成一个类,把具体的业务逻辑功能实现封装成一个方法,
其次封装的意义还有效的保护属性经过访问修饰符私有化属性(成员变量),公有化方法。
继承:实现代码的复用,全部的子类所共有的行为和属性抽取为一个父类,全部的子类继承该类可具有父类的属性和行为,
继承具备单一性和传递性。
多态:程序中定义的引用类型变量所指向的具体类型和调用的具体方法在程序编译阶段没法肯定,
而是在运行期才能肯定该引用类型变量指向具体哪一个对象而调用在哪一个类中声明的方法。
4.JS继承是什么?
继承:子类可使用父类的全部功能,而且对这些功能进行扩展。继承的过程,就是从通常到特殊的过程。
缺点:使用类继承的方法,若是父类的构造函数中有【引用类型】,就会在子类中被全部实例共用
,所以一个子类的实例若是更改了这个引用类型,就会影响到其余子类的实例。
正式由于有了上述的缺点,才有了构造函数继承,构造函数继承的核心思想就是SuperClass.call(this,id),
直接改变this的指向,使经过this建立的属性和方法在子类中复制一份,由于是单独复制的,
因此各个实例化的子类互不影响。可是会形成内存浪费的问题
5.get\post的区别
Get 请求能缓存,Post 不能
Post 相对 Get 安全一点点,由于Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,
Post 不会,可是在抓包的状况下都是同样的。
Post 能够经过 request body来传输比 Get 更多的数据,Get 没有这个技术
URL有长度限制,会影响 Get 请求,可是这个长度限制是浏览器规定的,不是 RFC 规定的
Post 支持更多的编码类型且不对数据类型限制
6.ES6新特性(提供的语法糖使复杂的操做变得简单)
①箭头函数 -- -- this指向当前对象
②在 ES6 中类(Classes)实际上是原型继承的语法糖(子类不但能够继承父类,还能够拥有本身的方法)
③加强了对象字面量
④字符串插值``(。就是反引号)
⑤解构 Destructuring可在参数位置使用(解构对象json数据的解构)
⑥参数默认值
⑦扩展运算符...
⑧For..of迭代器的新类型,能够替代for..in,它返回的是值而不是keys。
⑨迭代器是一个比数组更动态的类型。
⑩生成器建立迭代器,而且比迭代器更具动态性。他们没必要以相同的方式跟踪状态 并不支持 done 的概念
7.js事件委托
元素响应事件(click、keydown......)的函数委托到另外一个元素;
优势
1.提升性能:每个函数都会占用内存空间,只需添加一个事件处理程序代理全部事件,所占用的内存空间更少。
2.动态监听:使用事件委托能够自动绑定动态添加的元素,即新增的节点不须要主动添加也能够同样具备和其余元素同样的事件。
举个例子,好比一个宿舍的同窗同时快递到了,一种方法就是他们都傻傻地一个个去领取,还有一种方法就是把这件事情委托给宿舍长
,让一我的出去拿好全部快递,而后再根据收件人一一分发给每一个宿舍同窗;
在这里,取快递就是一个事3件,每一个同窗指的是须要响应事件的 DOM
元素,而出去统一领取快递的宿舍长就是代理的元素,因此真正绑定事件的是这个元素,
按照收件人分发快递的过程就是在事件执行中,须要判断当前响应的事件应该匹配到被代理元素中的哪个或者哪几个。
8.阻止冒泡(单词拼读)
w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true
javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡。
取消默认事件
w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;
9.setTimeout、Promise、Async/Await 的区别(看大家本身的理解)