什么是闭包、闭包的概念

什么是闭包:

就是函数的一个特殊用法

--把一个函数作为另一个函数的返回值

--也可以把闭包理解为就是个函数

--就是指函数与其周围的状态的组合

闭包的写法:

1.函数内部嵌套一个函数:必须要有一个函数套在另一个函数的内部 2.内部函数可以访问外部函数的变量  

3.外部函数返回内部函数

function box() {

  var a = 1;

  return function () {

    console.log(a);

  };

}

let arr = box();

console.log(arr); //这里返回的是box里面的函数:ƒ () {console.log(a);}

arr(); //这里是调用了box里面返回的函数,外部可以使用到函数内部的变量

--在这里 a 和 return 就是闭包  

--外可以使用到内部(局部)的函数和变量

 闭包的特点:

1.局部变量常驻内存(像全局变量),不会污染全局命名空间

常驻内存:

let w = 1; //全局变量,什么时候都可以使用

function ww() {

  let m = 2; //局部变量,在函数调用的那一刻可以使用

  console.log(m);

}

ww();

console.log(m); //不能使用,会报错;函数执行完以后,函数的执行空间(词法环境)和变量就会被销毁(垃圾回收机制)

 闭包的原理:

1.垃圾回收机制:被外部引用的局部变量不会被回收 2.作用域链:内部函数使用变量的时候会先在自身作用域中找,找不到就向他的父级作用域进行寻找,以此类推。

闭包的缺点:

使用不当会造成内存泄漏

--如果疯狂的调用 box,那么调用一次就会产生一个闭包。

function box() {

  var a = 1;

  return function () {

    console.log(a);

    a++;

    return a;

  };

}

let a = 1;

let resFN = box();

console.log(resFN);

let r1 = resFN();

console.log(r1);

let r2 = resFN();

console.log(r2);

--解决方法:

function box() {

  var a = 1;

  return function () {

    console.log(a);

    a++;

    return a;

  };

}

let a = 1;

let resFN = box();

console.log(resFN);

let r1 = resFN();

console.log(r1);

let r2 = resFN();

console.log(r2);

resFN = null; //当不再使用这个函数的时候给他设置为空

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值