浅谈js中的闭包

本文通过一个具体的示例详细解释了JavaScript中的闭包概念,展示了如何利用闭包来实现对外部函数内部变量的操作,并讨论了其在实际应用中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个个刚刚接触前端的新手,天天听人讲闭包,听的那个高大尚,心中对各位技术大佬是那个的膜拜,于是做为前端菜鸟的我,就去了解了传说中的闭包。

何为闭包?
通俗易懂的讲,就是可以调用函数内部的变量和方法

举例说明如下:

     function test(){
           var x = 1;
           var y = 2;
           function func1(){
               x++;
               console.log("x:"+x);
           }

           function func2(){
               y++;
               console.log("y:"+y);
           }

            func3 = function(){
               console.log("x+y:"+(x+y));
           }

           return {
               func1:func1
           }
       }

       var obj1 = test();
       obj1.func1();//输出x:2
       obj1.func1();//输出x:3
       func3();//输出x+y:5

       var obj2 = test();
       obj2.func1();//输出x:2
       obj2.func1();//输出x:3
       obj2.func1();//输出x:4
       func3();//输出x+y:6

       obj1.func1();//输出x:4
       func3();//输出x+y:6

解析:你可以把test理解成一个对象,首先建立一个obj1对象,这个时候调用obj1.func1()时,test中的x会被累加,这个就是闭包的一个特点,就是外部可以改变函数内部的变量值,这里要记住一点,只有在test中return返回的函数在外部才能被调用,如果此时调用obj1.func2()会提示出错的,只有跟func1一样在return中返回才能被外部调用;func3可以理解为公有的函数,但是只有在声明完test之后才能被调用,因为func3第一次定义是在test中定义的,所有要先test()之后才能被调用;obj2是新建立的一个对象,此时的obj1和obj2两个对象是互不干扰的,各自叠加,这也是闭包的一个特性,可以用在以后建立多个计时器时使用闭包,事半功倍;这里要特别强调一下func3这个函数,第一个func3调用的是对象obj1中的func3,而当obj2新对象声明之后,func3调用的就是obj2中的func3了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值