js 闭包函数

141 阅读1分钟

面试官:简简单单说说什么是闭包?

在前端面试的过程中有很多小伙伴会有很大的几率会被面试官问到简单说说闭包?

像这种面试题属于高频率的面试题几乎就是在我们前端面试题中属于必问一道关于js的面试题

不会的小伙伴可以跟着这期的博客来学一学吧!

什么是闭包?

闭包说的通俗一点就是可以在函数外部访问到函数内部的变量。 因为正常情况下函数外部是访问不到函数内部作用域变量的,作用域分为全局函数及块级作用域 实例:

function fun () {
  var count = 0
  return {
    getCount: function () {
      console.log(count)
    },
    setCount: function () {
      count++
    }
  }
}

var fn = fun()

fn.getCount() 
fn.setCount()
fn.getCount() 

实例2

   
   function funB()
   {
      var a = 20; 
      return function()
     { 
         alert(a);
     }
   }
  var b = funB();
  b();

表现判断是不是闭包?

函数嵌套函数 内部函数被 return 内部函数调用外层函数的局部变量

闭包的优点?

可以隔离作用域,不造成全局渲染

闭包的缺点?

由于长期驻留内存,则长期这样会导致内存泄漏

如何解决内存泄漏?

将暴露外部的闭包变量变为null

闭包的使用场景?

函数防抖、函数节流、函数柯里化、给元素伪数组添加事件需要使用元素的索引值。

防抖函数

    // 1.封装防抖函数
        function debounce(fn, time) {

            let timeout = null;
            return function () {
           
                clearTimeout(timeout);

                timeout = setTimeout(() => {
           
                    fn();
                }, time);
            };
        }

节流函数


        function debounce(fn, time) {

            let timeout = null;
            return function () {

                clearTimeout(timeout);
   
                timeout = setTimeout(() => {
  
                    fn();
                }, time);
            };
        }

怎么样?是不是很简单!关注小宁面试不迷路!我们下期再见!