浅析闭包

1、什么叫闭包?

一个作用域可以访问另外一个函数内部的局部变量 ,或者说一个函数(子函数)访问另一个函数(父函数)中的变量。 此时就会有闭包产生 ,那么这个变量所在的函数我们就称之为闭包函数。比如下面例子:

function makeFn(){
    var name = "Mirror";
    function showName(){
        alert(name)
    }
    return showName;
}

var myFn = makeFn();
myFn();  // "Mirror"

在以上的例子中,myFn是执行makeFn时创建的showName函数实例的引用,而showName实例仍可访问其词法作用域中的变量,既可以访问到name。 由此,当myFn 被调用时,name仍可被访问。

2、闭包的优点?

避免全局变量的污染,

3、闭包的缺点?

如果使用不当会造成内存泄露的问题,什么叫内存泄露?就是指用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。那怎么解决内存泄露问题呢?就是在使用完这个函数或是变量使用完成后及时的销毁掉就可以了。

4、闭包的三个特征:

(1)函数嵌套函数
(2)函数内部可以引用函数外部的参数跟变量
(3)参数跟变量不会被我们JS中的垃圾回收机制回收。

5、闭包的使用场景:

(1)防抖与节流

// 节流函数封装
function throttle(func, delay) {
  let timer = null;
  return function () {
    if (!timer) {
      timer = setTimeout(() => {
        func.apply(this, arguments);
        timer = null;
      }, delay);
    }
  };
}
// 防抖函数封装
function debounce(func, delay) {
  let timer = null;
  return function () {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  };
}

(2)函数柯里化:
JavaScript函数柯里化是一种将使用多个参数的函数转换为一系列使用一个参数的函数的技术。

//柯里化前
function add(a, b, c) {
  return a + b + c;
}
console.log(add(1, 2, 3)); //6
//柯里化后
function addCurried1(a) {
  return function (b) {
    return function (c) {
      return a + b + c;
    };
  };
}
//箭头函数简写
const addCurried2 = (a) => (b) => (c) => a + b + c;
console.log(addCurried1(1)(2)(3)); //6
console.log(addCurried2(1)(2)(3)); //6
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、什么是闭包 关于闭包的解释有很多,而我个人理解的闭包,就是引用了局部作用域变量的函数。他由以下两部分构成: 可...
    Da_xiong阅读 1,198评论 0 0
  • 概念:闭包 的英文解释是有“block”的概念,所以,闭包就是一个封闭的函数,这个函数的特殊之处在于,是外部函数返...
    海Annie阅读 1,751评论 0 0
  • 概念 闭包是指有权访问另外一个函数作用域中的变量的函数 闭包的优点 可以重复使用变量,并且不会造成变量污染 全局变...
    简单tao的简单阅读 18,565评论 0 27
  • 什么是闭包? 闭包是指那些能够访问自由变量的函数。自由变量:指在函数中使用的,但既不是函数参数也不是函数的局部变量...
    BubbleM阅读 2,607评论 0 1
  • 概念 闭包是指有权访问另外一个函数作用域中的变量的函数 闭包的优点 可以重复使用变量,并且不会造成变量污染 全局变...
    王果果阅读 1,859评论 0 1

友情链接更多精彩内容