互联网科技

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

2018-12-12  本文已影响2人  秋风_bdfd

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

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

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

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

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

如(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程序员的一大站点,理解了闭包的原理和机制才能让我们写出耿更安全、更实用的代码。

上一篇下一篇

猜你喜欢

热点阅读