什么是闭包
定义
闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
闭包就是(编译器创建的)执行一段代码所需要的上下文。
闭包的优点:
保护函数内的变量安全,加强了封装性,变量可以一直存储在内存中。
闭包的作用?
通过使用闭包,最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。闭包使得Javascript的垃圾回收机制GC不会回收函数a所占用的资源,因为函数a的内部函数b的执行需要依赖函数a中的变量,这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样。也简单讲讲垃圾回收机制吧。
Javascript的垃圾回收机制GC:
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。
闭包的缺点
闭包最严重的问题就是内存浪费;因为闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
示例
代码1
1 | var name = "The Window"; |
会显示The Window
代码2
1 | var name = "The Window"; |
会显示My Object