1、什么是闭包?

js的变量可以分为 全局变量 和 局部变量。

全局变量:函数内部可以访问到全局变量;

局部变量:函数内部的变量,外部访问不到。

闭包:就是能够读取其他函数内部变量的函数。

最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

例子:

复制代码
function f1(){

   var n=999;

   function f2(){
     alert(n); // 999
   }

}

  var result=f1();

 result(); // 999
复制代码

可以通过调用内部函数,得到内部变量值,这就是闭包。

闭包的缺点:

1.闭包会使得函数内部的变量都被保存在内存中,内存消耗很大,不能滥用闭包,否则会造成网页性能问题。
解决办法:在退出函数之前,将不再使用的局部变量清除。

2.闭包会在父函数外部,改变父函数内部变量的值。

2、undefined 和 null 的区别 ?

undefined和null都表示 值的空缺;
undefined:可以认为是系统的、出乎意料的或类似错误的值的空缺;
null:表示程序化的、正常的、或者意料之中的空缺。

3、http和https有什么区别?

http是HTTP协议运行在TCP之上。所有传输内容都是明文,客户端和服务端都无法验证对方身份。

https是HTTP协议运行在SSL/TLS之上的,SSL/TCL是运行在TCP之上的。
所有传输内容都是加密的,加密采用对称加密,但对称加密的秘钥用服务器方的证书进行了非对称加密。
客户端可以验证服务器端的身份,如果配置了客户端验证,那么服务器也可以验证客户端身份。

4、优雅降级和渐进增强?

也就是 向上兼容和向下兼容浏览器的概念。

优雅降级:一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用css3的特性构建了一个应用,然后逐步针对各大浏览器进行hack使其可以在低版本浏览器正常浏览。
其实也就是 适配低版本的浏览器页面。

渐进增强:一开始对低版本的浏览器进行构建页面,完成基本的功能,然后在针对高等级浏览器进行效果、交互、功能的追加,达到更好的体验。

5、eval()的作用?

把字符串解析成js代码并运行,并返回执行结果。

6、什么是内存泄露 和 垃圾回收机制?

程序的运行需要内存。对于持续运行的服务器进程,必须要释放不需要的内存。否则内存越来越高,会影响性能或者崩溃。
内存泄露:不再利用的内存,没有及时释放,就叫做内存泄露。

垃圾回收:自动管理内存,清理不可用对象,已到达释放内存的目的。
最经常使用的方法:引用计数,保存了内存里面的所有的资源的引用次数。如果一个值的引用次数为0,则表示这个值不再用到了,可以将内存释放了。
可达性算法,也就是构建树结构,一个对象正在使用就是可达,就不可回收。

哪些操作会造成内存泄露?

意外的全局变量
闭包引起
没有清理的dom元素
被遗忘的定时器或者回调函数
子元素存在引起的内存泄露  

 

7、JS事件冒泡和JS事件委托?

事件冒泡:

事件冒泡:当一个元素接收到事件的时候,会把他接收到的事件传递给父级。
例如:
<ul>
  <li>点击</li>
</ul>
当点击 li的时候,父级ul的点击事件也会被触发。

阻止事件冒泡的方法:e.stopPropagation()
非标准的IE模式:window.event.cancelBulle = true;

事件委托:

事件委托:也叫事件代理。就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
为什么使用事件委托?
1、在JavaScript中,添加到页面上的事件处理程序的数量将直接关系到页面的运行性能。因为需要不断与dom节点进行访问,访问的次数越多,引起浏览器重绘和重排的次数也会越多,
就会影响整个页面的交互就绪时间,这就是为什么性能优化的主要思想之一就是减少dom操作。
如果利用事件委托,就会把所有的事件放到js里面,与dom的交互操作只有一次,就大大减少了与dom交互次数,提高性能。
2、节省内存。
每个函数都是对象,如果不使用事件委托的话,有几个事件就会占用多少个内存。如果使用事件委托的话,那我们就可以只对父级这一个对象进行操作,只需要占用一个内存空间,可以提高性能。

事件委托的最经典的作用?

就是利用事件委托的方法,给新添加的子元素是带有事件效果的。
在用事件委托的时候,根本不需要遍历所有元素的子节点,只需要给父级添加事件就可以了,其他的都在js里面运行的。
这样就大大减少了dom操作。

参考:https://blog.csdn.net/qq_38290251/article/details/88026540

 

 

 

 

 

 

  

 

posted on 2020-11-09 16:27  liumcb  阅读(79)  评论(0编辑  收藏  举报