什么是闭包?闭包的优缺点,用途,以及相关知识

怎么答

回答这一类的面试题的时候你觉得需要用到方法论吗?如何有理有据的论述你的答案,用简洁的话回答出面试官想要听到的重点,而不是长篇大论抓不住重点,希望大家看完这篇文章能够举一反三,形成自己的见解

有些时候,你回答一些问题的逻辑思维,在高段位的面试官那里就完全能够了解到你当前的水平了

在我们回答这些问题的时候可以按照这个逻辑去回答,理清楚你要回答的思路,把你的观点清晰的表达给面试官

讲概念

优缺点

说用途

拆解
讲概念
红宝书:闭包是指有权访问另一个函数作用域中变量的函数

MDN: 闭包是指那些能够访问自由变量的函数,这里的自由变量是指外部作用域中的变量

作用域

全局作用域

局部作用域(函数作用域)

词法作用域 ---》作用域链

执行上下文

涉及到哪些知识点

优缺点
优点:私有化数据,在私有化数据的基础上保持数据

举个例子:防抖:

红宝书:任何在函数中定义的变量,都可以认为是私有变量


   

/**

* 手写题也是一样,不要上来就写,先把注释写好,写出自己的思路见解,

  有些时候写不出来,有自己的思路也是面试官比较看重的点

* 概念

* 思路

* 编码

*/

function debounce(fn,delay) {

   let time= null; // 私有化数据

   return function (){

       let context = this,args = arguments;

       if(time) { // 下一次点击的时候获取到上一下的time,也就是保持数据。

           clearTimeout(time)

           // 思考题 这里要不要清空time

           // time = null;

       }

       time = setTimeout(function (){

           fn.apply(context,args);

       },delay)

   }

}


缺点:可能会导致内存泄漏,内部的变量不会被自动回收掉

标记清除

引用计数

新生代,老生代

垃圾回收机制


    

/**

 * 手写题也是一样,不要上来就写,先把注释写好,写出自己的思路见解,

   有些时候写不出来,有自己的思路也是面试官比较看重的点

 * 概念

 * 思路

 * 编码

 */

function assignHandler() {

    var element = document.getElementById('root3');

    element.onclick = function () {

        alert(element.id)

    }

 // element = null  

 // 

}


以上代码创建了一个作为element元素事件处理程序的闭包,而这个闭包又创建了一个循环引用。由于匿名函数保存了一个对assignHandler() 的活动对象的引用,因此就会导致无法减少element的引用数,只要匿名函数存在,element 的引用数至少也是1,因此会占用内存久永远不会被回收

上面的例子和解析,都是红宝书的原题,我手抄下来的,大家一定要多看书,书上讲的很清晰易懂!

说用途
防抖,节流 ......

vue :响应式原理

react :fiber,hooks原理

答题
闭包是指有权访问另一个函数作用域中变量的函数,优点是私有化数据,在私有化数据的基础上保持数据,缺点使用不恰当会导致内存泄漏,在不需要用到的时候及时把变量置为null

闭包的应用是非常广泛的,比方我们常见的节流,防抖,函数柯理化,在vue,react源码中也应用广泛(如果你们接的住vue,react源码中,具体的应用场景你就可以答)

总结复盘
一道题的背后往往涉及到非常多的知识,就像套娃一样,你想一想你能不能接住面试官的三连问?就像闭包设计到了

作用域&作用域链

执行上下文 --》这里又会衍生到this相关的问题和手写代码题

缓存,内存

垃圾回收机制

以及对知识广度的探索,比方你举例的应用场景够不够有说服力 作者:前端要努力 https://www.bilibili.com/read/cv16432743?spm_id_from=333.999.0.0 出处:bilibili

你可能感兴趣的:(java,servlet,面试)