【js前端面试】闭包/闭包的作用

闭包是JavaScript中的一个重要概念,它允许内层函数访问并修改外层函数的局部变量。文章通过计数器的例子解释了闭包如何工作,展示了如何利用闭包实现计数器功能,以及如何避免重复调用相同参数的函数。闭包还能用于创建私有变量,保持变量的独立性,常用于计数器、延迟调用和回调函数等场景。
摘要由CSDN通过智能技术生成

什么是闭包

如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。
闭包可以让我们在一个内层函数中访问到外层函数的作用域。

在js中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一个桥梁。

下面是一个计数器(闭包)的例子:
1>在初始化c的时候,add()方法执行一次,但是没有执行plus,最终返回plus函数。
2>第一次调用c(),闭包函数plus()第一次执行,counter+1,值为1.
3>第二次调用c(),闭包函数plus()第二次执行,counter再次+1,值为2

//实现计数器
function add(){
    var counter = 0;
    function plus(){
        counter += 1;
        console.log(counter);
    }
    //这里的返回值不加()
    return plus;
}
var c = add();      //这里plus没有执行
c();
c();
//最终输出1 2

还有当频繁调用具有相同参数的函数时,使用闭包可以进行重用。
比如我们计算长方形的面积,一般的写法如下:

function area(width,height){
    return width*height;
}
area(10,2);
area(10,3);

但是当我们多次使用width=10来计算时,可以使用闭包来避免相同参数的频繁调用:

//使用闭包求长方形面积
function solve(width){
    function area(height){
        return width*height;
    }
    return area;
}
var a = solve(10);
console.log(a(2));		//20
console.log(a(3));		//30

闭包的作用

闭包常常用来间接访问一个变量,或者隐藏变量。(全局变量能通过闭包实现局部私有)

在js中,没有声明私有变量的方法,这时可以通过闭包来完成。
还是计数器的例子,我们声明两个计数器c和d:
其中c和d是维护他们各自独立性的,每次调用其中一个计数器时,会改变这个闭包的词法环境,但是不会影响另一个闭包中的变量。

//实现计数器
function add(){
    var counter = 0;
    function plus(){
        counter += 1;
        console.log(counter);
    }
    //这里的返回值不加()
    return plus;
}
var c = add();      //这里plus没有执行
c();      //1
c();      //2
var d = add();
d();      //1   c计数器不会改变d计数器

闭包主要用在计数器、延迟调用、回调等。
核心思想是创建私有变量、延迟变量的生命周期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值