美文网首页互联网科技
web前端必知篇:闭包的理解

web前端必知篇:闭包的理解

作者: 秋风_bdfd | 来源:发表于2018-12-12 20:24 被阅读2次

    闭包这玩意,在面试的时候经常被问到。如果你还不了解,小编就简单的讲解一下!

    闭包是什么,闭包的优点是什么?

    闭包就是可以访问另一个函数作用域中的变量函数。所以想要了解闭包,我们首先就要了解作用域

    作用域无非就是两种:全局变量局部变量

    全局变量:全局变量就是在全局环境下声明的变量。全局变量在该环境下什么地方都可以被访问,除非等到你将应用程序关闭的时候才会被销毁。但是全局变量容易被修改,容易造成全局污染等问题。

    如(JS代码):

    var i = 666; //全局变量

      function f1(){

        alert(i); //在一个函数中被使用

      }

    f1(); //函数执行

    执行结果就是:666。

    局部变量:局部变量就是只能在当前这个函数的内部被访问到,等到函数执行完毕后就会被销毁。

    咱们将代码稍稍修改,如:

      function f1(){

        var i = 666; //在一个函数中声明了一个变量

      }

    alert(i); //外部访问这个变量

    结果可想而知....

    了解作用域之后,咱们就来说说闭包:

    咱们以一个简单例子来讲(代码如下):

    函数a内部函数b函数a外的一个变量引用的时候,就创建了一个闭包。

    闭包的优点:

    保护函数内的变量安全,加强了封装性,变量可以一直存储在内存中。

    如果有想学习web前端的小伙伴,可以加入我的学习q u n哦:68795,

    8461,小编是一名从事了5年前端开发的全栈工程师,现在辞职,

    在做线上教育,免费送一套Web前端资料、教程哦。

    第二、闭包的作用?

    通过使用闭包,最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。闭包使得Javascript的垃圾回收机制GC不会回收函数a所占用的资源,因为函数a的内部函数b的执行需要依赖函数a中的变量,这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样。也简单讲讲垃圾回收机制吧。

    第三、Javascript的垃圾回收机制GC:

    在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

    第四、闭包的缺点

    闭包最严重的问题就是内存浪费;因为闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。

    JavaScript中的闭包是我们步入高级JS程序员的一大站点,理解了闭包的原理和机制才能让我们写出耿更安全、更实用的代码。

    相关文章

      网友评论

        本文标题:web前端必知篇:闭包的理解

        本文链接:https://www.haomeiwen.com/subject/tnaphqtx.html