资讯专栏INFORMATION COLUMN

浅谈js中的闭包

kumfo / 1472人阅读

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

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

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

举例说明如下:

     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了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84528.html

相关文章

  • 云天视角-浅谈闭包

    摘要:函数在执行的时候执行函数,将当前的变量对象由于当前的环境是函数,所以将其活动对象作为变量对象添加到作用域链的前端。此时,由于在执行,而作用域链也存在,所以可以在作用域链上进行查找,去访问的变量。 一、现状 闭包是jser绕不过的坎,一直在都在说,套用 simpson 的话来说:JavaScript中闭包无处不在,你只需要能够识别并拥抱它。 闭包是基于词法作用域书写代码时的自然结果,你甚...

    nanfeiyan 评论0 收藏0
  • 浅谈js内存与闭包

    摘要:将他们放在堆中是为了不影响栈的效率。接着是临时空间函数执行的时候,会临时开辟一块内存空间,这块内存空间长得和外面这个一样,也有自己的栈堆,当函数运行完就销毁。中的内存第一个部分还是和上面的一样,有栈堆运行时环境,另外还有一个缓冲区存放。 0.前言 主要结合了内存的概念讲了js的一些的很简单、但是又不小心就犯错的地方。结论:js执行顺序,先定义,后执行,从上到下,就近原则。闭包可以让外部...

    dailybird 评论0 收藏0
  • 浅谈JavaScript中的闭包

    摘要:在内部,理所当然能访问到局部变量,但当作为的返回值赋给外的全局变量时,神奇的事情发生了在全局作用域中访问到了,这就是闭包。而闭包最神奇的地方就是能在一个函数外访问函数中的局部变量,把这些变量用闭包的形式放在函数中便能避免污染。 一、闭包是什么? 《JavaScript高级程序设计》中写道:闭包是指有权访问另一个函数作用域中的变量的函数,如果用下定义的观点看,这句话就是说闭包是函数,我...

    Riddler 评论0 收藏0
  • 浅谈reacthooks闭包陷阱

      本文不会过多讲解基础知识,更多说的是在使用useRef如何能摆脱 这个 闭包陷阱 ?  react hooks 的闭包陷阱 基本每个开发员都有遇见,这是很令人抓狂的。  (以下react示范demo,均为react 16.8.3 版本)  列一个具体的场景:  functionApp(){   const[count,setCount]=useState(1);   useEffect(()=...

    3403771864 评论0 收藏0
  • 浅谈Javascript闭包和匿名函数【1】

    摘要:我们可以用普通函数内部嵌套匿名函数,形成一个闭包来使变量驻留在内存中。局部变量闭包为什么要将赋值给变量呢这里我们就要谈到匿名函数调用问题匿名函数如何调用还是上面的例子会将整个函数体打印出来这样才调用了函数内部的匿名函数看到这里。 闭包含义: 闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。 这...

    cyqian 评论0 收藏0

发表评论

0条评论

kumfo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<